【9018:1956】線段樹1

問題 D: 【模板】線段樹1

時間限制: 1 Sec??內存限制: 512 MB
提交: 80??解決: 40
[提交][狀態][討論版]

題目描述

給定一個無序數列,有四種操作:

1.令數列中的某個數加上某個數

2.求一個區間的和

3.查詢一段區間內的最大值;

4.查詢一段區間內的最小值;

輸入

輸入的第1行,共有兩個數n和q,表示數列長度和操作次數

輸入的第2行,共有n個數,表示該數列

接下來共有q行,每行有三個數

第1個數為操作類型,具體如下

若是第1種操作,接下來兩個數x,y分別表示將第x個數加y

若是第2~4種操作,接下來兩個數x,y表示閉區間的左右端點

輸出

輸出共有若干行,對于每一個詢問輸出一個整數結果

樣例輸入

5 4 
1 2 3 4 5
2 1 4
1 3 -2
3 1 5
4 2 3

樣例輸出

10
5
1

提示

?

1<=n,q<=200000


保證所有數據在c/c++語言的INT范圍內,pascal語言的longint范圍內。

題解:線段樹模板題,這個模板可支持區間加減。
代碼如下:
 1 #include<cstdio>
 2 #include<iostream>
 3 #define Max 200000
 4 using namespace std;
 5 int n,q;
 6 struct node{
 7     int maxn,minn,sum,mark;
 8 }tree[Max*3];
 9 void pushdown(int k,int l,int r){
10     tree[2*k].mark+=tree[k].mark;
11     tree[2*k+1].mark+=tree[k].mark;
12     int len=r-l+1;
13     tree[2*k].sum+=tree[k].mark*(len-len/2);
14     tree[2*k+1].sum+=tree[k].mark*(len/2);
15     tree[k].mark=0;
16 }
17 void update(int l,int r,int a,int b,int k,int add){
18     if(a<=l&&b>=r){
19         tree[k].maxn+=add; tree[k].minn+=add;
20         tree[k].sum+=(r-l+1)*add; return;
21     }
22     if(l!=r&&tree[k].mark) pushdown(k,l,r);
23     int mid=(l+r)/2;
24     if(a<=mid) update(l,mid,a,b,2*k,add);
25     if(b>mid) update(mid+1,r,a,b,2*k+1,add);
26     tree[k].maxn=max(tree[2*k].maxn,tree[2*k+1].maxn);
27     tree[k].minn=min(tree[2*k].minn,tree[2*k+1].minn);
28     tree[k].sum=tree[2*k].sum+tree[2*k+1].sum;
29 }
30 int query(int l,int r,int a,int b,int k,int num){
31     if(a==l&&b==r){
32         if(num==3) return tree[k].maxn;
33         if(num==4) return tree[k].minn;
34         if(num==2) return tree[k].sum;
35     }
36     if(l!=r&&tree[k].mark) pushdown(k,l,r);
37     int mid=(l+r)/2;
38     if(b<=mid) return query(l,mid,a,b,2*k,num);
39     else if(a>mid) return query(mid+1,r,a,b,2*k+1,num);
40     else{
41         if(num==3) return max(query(l,mid,a,mid,2*k,num),query(mid+1,r,mid+1,b,2*k+1,num));
42         if(num==4) return min(query(l,mid,a,mid,2*k,num),query(mid+1,r,mid+1,b,2*k+1,num));
43         if(num==2) return query(l,mid,a,mid,2*k,num)+query(mid+1,r,mid+1,b,2*k+1,num);
44     }
45 }
46 int main()
47 {
48     scanf("%d%d",&n,&q);
49     for(int i=1;i<=n;i++){
50         int a; scanf("%d",&a); update(1,n,i,i,1,a);
51     }
52     for(int i=1;i<=q;i++){
53         int num,x,y; scanf("%d%d%d",&num,&x,&y);
54         if(num==1) update(1,n,x,x,1,y);
55         if(num==2) printf("%d\n",query(1,n,x,y,1,2));
56         if(num==3) printf("%d\n",query(1,n,x,y,1,3));
57         if(num==4) printf("%d\n",query(1,n,x,y,1,4));
58     }
59     return 0;
60 }

?

轉載于:https://www.cnblogs.com/Beginner-/p/7467737.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251916.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251916.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251916.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++調用函數的dll

在工程項目中&#xff0c;為了不暴露源代碼和避免嚴重耦合&#xff0c;所以將代碼封裝成 .dll二進制文件&#xff0c;以供項目調用。 這幾天&#xff0c;也是在看這些封裝dll&#xff0c;并使用Java中的JNA調用c的dll鏈接庫中的函數&#xff0c;做個筆記&#xff01; 1、創建…

SoJpt Boot 2.2-3.8 發布,Spring Boot 使用 Jfinal 特性極速開發

開發四年只會寫業務代碼&#xff0c;分布式高并發都不會還做程序員&#xff1f; 在Spring Boot框架下使用Jfinal特性極速開發,可以在Spring Boot中向使用Jfinal一樣使用Enjoy、Aop、Controller等一系列方法(如: getFile(), renderFile....),以及ActiveRecord SoJpt Boot&…

組合數學--約瑟夫環問題 Josephus

約瑟夫斯問題&#xff08;有時也稱為約瑟夫斯置換&#xff09;&#xff0c;是一個出現在計算機科學和數學中的問題。在計算機編程的算法中&#xff0c;類似問題又稱為約瑟夫環。 有n個囚犯站成一個圓圈&#xff0c;準備處決。首先從一個人開始&#xff0c;越過k-2個人&#xff…

3軸機器人各關節運動學建立,python編程,非常容易理解

分類&#xff1a;機器人學 一、問題描述 如右圖所示的三自由度機械臂&#xff0c;關節1和關節2相互垂直&#xff0c;關節2和關節3相互平行。如圖所示&#xff0c;所有關節均處于初始狀態。 要求: (1) 定義并標注出各關節的正方向&#xff1b; (2) 定義機器人基坐標系&#x…

ASP.Net中頁面傳值的幾種方式

大致概括一下&#xff0c;ASP.NET 頁面之間傳遞值得方式大致可以分為如下幾種&#xff1a;Request.QueryString["name"],Request.Form("name"),Session,Cookie,Cache,Application,Server.Transfer,Database,HttpContext的Item屬性&#xff0c;Files,DataBa…

Win 10 源碼一覽:0.5T 代碼、400 萬文件、50 萬文件夾

Windows 操作系統本身是不開源的&#xff0c;但是近日微軟內核工程師 Axel Rietschin 發表了一篇博客&#xff0c;帶大家一窺了 Windows 10 內核的魅力。 Axel 介紹&#xff0c;Windows 10 與 Windows 8.x、7、Vista、XP、2000 和 NT 的代碼庫是相同的&#xff0c;其中每一代都…

老齊python-基礎3(列表)

1、定義一個列表 >>> a [] #創建一個空列表 >>> type(a) #查看數據類型 <class list> >>> bool(a) #判斷非空 False >>> print(a) [] >>> a [2,3,tajzhang,] >>> a [2, 3, tajzhang] >&…

UWP 響應鍵盤組合快捷鍵

方法1&#xff1a;響應Ctrl&#xff1f;快捷鍵 首先在load事件或者keydown事件內注冊事件 public MainPage(){this.InitializeComponent();// Register for accelerator key events used for button hotkeysWindow.Current.CoreWindow.Dispatcher.AcceleratorKeyActivated Dis…

NDK 開發實戰 - 封裝 java 層 sdk 模型

關于 Ndk 開發&#xff0c;網上的資料比較少&#xff0c;這方面的書籍也不多。因為其涉及的知識非常廣&#xff0c;時常有哥們問我&#xff0c;東西那么多到底要學到什么程度呢&#xff1f;到底應該怎么學&#xff1f;這期我給大家來做一個簡單回答&#xff0c;首先單純站在 An…

JDK+Tomcat搭建JSP運行環境--JSP基礎

一、搭建JSP運行環境之前需要了解的基本知識 配置JSP運行環境之前&#xff0c;我們需要了解JSP的運行機制。只有了解JSP運行機制后&#xff0c;我們才能知道為什么要搭建JSP運行環境?如何去搭建JSP運行環境?為什么要配置Tomcat、JDK&#xff1f; JSP(Java Sever Page)即Java服…

Docker容器的自動化監控實現

本文由 網易云 發布。 近年來容器技術不斷成熟并得到應用。Docker作為容器技術的一個代表&#xff0c;目前也在快速發展中&#xff0c;基于 Docker的各種應用也正在普及&#xff0c;與此同時 Docker對傳統的運維體系也帶來了沖擊。我們在建設運維平臺的過程中&#xff0c;也需…

robotframework 常用關鍵字

標準庫 第三方庫 其他庫轉載于:https://www.cnblogs.com/Chamberlain/p/10729054.html

身份證的驗證

var Wi [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加權因子 var ValideCode [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份證驗證位值.10代表X function checkIdcard(idCard) { idCard trim(idCard);//去掉字符串頭尾空格 if (idCard.length 15…

人工智能實戰小程序之語音_前端開發

1. 人工智能實戰小程序之準備工作 2. 人工智能實戰小程序之語音_前端開發 今天這部分主要講小程序前端功能的開發由于我偏后端&#xff0c;css是我的弱項&#xff0c;可能很多人和我一樣開發小程序不知道如何下手&#xff0c;希望本篇文章對你有幫助我的學習路線是&#xff1a;…

當TFS/VSTS遇上Power BI

引言眾所周知&#xff0c;要對TFS進行深入的圖表分析&#xff0c;往往需要依賴于SQL Server Analysis Service和SQL Server Reporting Service。雖然隨著TFS對敏捷項目的支持&#xff0c;內置了諸如累積流圖、燃盡圖等快捷圖表&#xff1b;并且在最新的版本中還可以在儀表盤和查…

HashMap深度解析:一文讓你徹底了解HashMap

寫在前面HashMap是Map族中最為常用的一種&#xff0c;也是 Java Collection Framework 的重要成員。本文首先給出了 HashMap 的實質并概述了其與 Map、HashSet 的關系&#xff0c;緊接著給出了 HashMap 在 JDK 中的定義&#xff0c;并結合源碼分析了其四種構造方式。最后&#…

Bzoj3628: [JLOI2014]天天酷跑

3628: [JLOI2014]天天酷跑 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 121 Solved: 44[Submit][Status][Discuss]Description 在游戲天天酷跑中&#xff0c;最爽的應該是超級獎勵模式了吧&#xff0c;沒有一切障礙&#xff0c;可以盡情的吃金幣&#xff0c;現在請你控制…

python_線程、進程和協程

線程 Threading用于提供線程相關的操作&#xff0c;線程是應用程序中工作的最小單元。 1 #!/usr/bin/env python2 #codingutf-83 __author__ yinjia4 5 6 import threading,time7 8 def show(arg):9 time.sleep(2) 10 print(線程: str(arg)) 11 12 for i in range(…

AppDelegate瘦身之服務化

有沒有覺得你的AppDelegate雜亂無章&#xff1f;代碼幾百行上千行&#xff1f;集成了無數的功能&#xff0c;如推送、埋點、日志統計、Crash統計等等&#xff0c;感覺AppDelegate無所不能。 來一段一般的AppDelegate代碼&#xff0c;來自網上一篇文章&#xff1a; UIApplicatio…

第四章:手機平板要兼顧-探究碎片

碎片是什么&#xff1f; 碎片&#xff08;Fragment&#xff09;是一種可以嵌入在活動&#xff08;Activity&#xff09;中的 UI 片段&#xff0c;它能讓程序更加合理和充分的利用大屏幕的空間&#xff0c;因而在平板上應用的非常廣泛。 碎片的使用方式 靜態嵌入動態加載碎片和活…