秋实大哥与线段树

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

“学习本无底,前进莫徬徨。” 秋实大哥对一旁玩手机的学弟说道。

秋实大哥是一个爱学习的人,今天他刚刚学习了线段树这个数据结构。

为了检验自己的掌握程度,秋实大哥给自己出了一个题,同时邀请大家一起来作。

秋实大哥的题目要求你维护一个序列,支持两种操作:一种是修改某一个元素的值;一种是询问一段区间的和。

Input

第一行包含一个整数nn,表示序列的长度。

接下来一行包含nn个整数aiai,表示序列初始的元素。

接下来一行包含一个整数mm,表示操作数。

接下来mm行,每行是以下两种操作之一:

  1. 1 x v : 表示将第x个元素的值改为v
  2. 2 l r : 表示询问[l,r]这个区间的元素和

1≤n,m,v,ai≤1000001≤n,m,v,ai≤100000,1≤l≤r≤n1≤l≤r≤n。

Output

对于每一个22 ll rr操作,输出一个整数占一行,表示对应的答案。

Sample input and output

Sample Input Sample Output
  1. 3
  2. 1 2 3
  3. 3
  4. 2 1 2
  5. 1 1 5
  6. 2 1 2
  1. 3
  2. 7

代码  树状数组

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstdio>
  4. #include<cstring>
  5. #define ll long long
  6. using namespace std;
  7. ll bit[],a[];
  8. ll n,m;
  9.  
  10. ll sum(ll i){//求元素1~i的和
  11. ll s=;
  12. while(i>){
  13. s+=bit[i];
  14. i-=i&(-i);
  15. }
  16. return s;
  17. }
  18.  
  19. void add(ll i,ll x){//将元素i加上x
  20. while(i<=n){
  21. bit[i]+=x;
  22. i+=i&(-i);
  23. }
  24. }
  25.  
  26. int main(){
  27.  
  28. scanf("%lld",&n);
  29. for(int i=;i<=n;i++){
  30. scanf("%d",&a[i]);
  31. add(i,a[i]);
  32. }
  33.  
  34. scanf("%lld",&m);
  35. for(int i=;i<=m;i++){
  36. ll x=,b=,c=;
  37. scanf("%lld%lld%lld",&x,&b,&c);
  38. if(x==){
  39. ll temp=c-a[b];//处理修改后的数与原数的差
  40. a[b]=c;
  41. add(b,temp);
  42. }
  43. else if(x==){
  44. ll temp=sum(c)-sum(b-);
  45. printf("%lld\n",temp);
  46. }
  47. }
  48. return ;
  49. }

用的树状数组,注意变量名要起好,像Line41我就直接写成了

  1. add(x,temp);

果断WA

还有Line40,没写,思考一下就知道,可能对一个值多次修改,然后Orz

代码 zkw线段树

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. #include<algorithm>
  5. #define ll long long
  6. using namespace std;
  7. ll tr[];//记得改long long
  8. ll n,temp,M,m;
  9.  
  10. void query(ll s,ll t){
  11. ll ans=;
  12.  
  13. for(s=s+M-,t=t+M+;s^t^;s>>=,t>>=){
  14. if(~s&) ans+=tr[s^];
  15. if(t&) ans+=tr[t^];
  16. }
  17.  
  18. printf("%lld\n",ans);
  19. }
  20.  
  21. void change(ll x,ll y){
  22. for(tr[x+=M]+=y,x>>=;x>;x>>=){
  23. tr[x]=tr[x<<]+tr[x<<|];
  24. }
  25. }
  26.  
  27. int main(){
  28. // freopen("01.in","r",stdin);
  29. scanf("%lld",&n);
  30. for(M=;M<(n+);M<<=);//定义M大小
  31.  
  32. for(ll i=;i<=n;i++){
  33. scanf("%lld",&temp);
  34. change(i,temp);
  35. }
  36.  
  37. scanf("%lld",&m);
  38.  
  39. for(ll i=;i<=m;i++){
  40. ll oper,s,t;
  41. scanf("%lld%lld%lld",&oper,&s,&t);
  42. if(oper==){
  43. query(s,t);
  44. }
  45. else if(oper==){
  46. temp=t-tr[s+M];
  47. change(s,temp);
  48. }
  49. }
  50. return ;
  51. }

Line 22

  1. x>>=1

一定要写

还有就是Line 30之前放到Line 36,诡异的错误

uestc 1073 秋实大哥与线段树 Label:线段树的更多相关文章

  1. UESTC 1061 秋实大哥与战争 线段树区间合并

    秋实大哥与战争 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 男儿何不带吴钩, ...

  2. UESTC - 1057 秋实大哥与花 线段树

    题意 秋实大哥是一个儒雅之人,昼听笙歌夜醉眠,若非月下即花前. 所以秋实大哥精心照料了很多花朵.现在所有的花朵排成了一行,每朵花有一个愉悦值. 秋实大哥每天要对着某一段连续的花朵歌唱,然后这些花朵的愉 ...

  3. UESTC 1059 - 秋实大哥与小朋友

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1059 Time Limit: 3000/1000MS (Java/Others)     Memory Li ...

  4. UESTC 1074 秋实大哥搞算数 栈模拟

    秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  5. UESTC - 1057 秋实大哥与花 线段树模板题

    http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...

  6. uestc poj2559 秋实大哥去打工

    //感觉有必要把这题放博客上待复习 刚刚写解题报告的时候发现自己又不会做这题了 //我不会告诉你这题绝对是命题人抄poj2559 这题使用一个单调递增的栈,栈内存储的元素有两个值,一个高度,一个长度. ...

  7. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  8. 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询

    D - 秋实大哥与战争 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...

  9. UESTC_秋实大哥与线段树 2015 UESTC Training for Data Structures<Problem M>

    M - 秋实大哥与线段树 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Sub ...

随机推荐

  1. 玩玩Excel下的Power View

    作为微软平台下的数据展示工具,Power View是一个不错的选择.而在Excel 2013下,即使你没有SharePoint的实例那么你也可以玩转它.此篇讲对Excel 2013下的Power Vi ...

  2. [SVN] SVN在Eclipse里的各个状态解释

    中文意义: A代表添加D代表删除U代表更新C代表合并,并且合并中有冲突G代表合并,合并中没有冲突 每个字母代表的意义: U = item (U)pdated to repository version ...

  3. 在linux配置NFS用于RAC的搭建

    rac的共享存储有很多种搭建方式,nfs是其中一种.生产环境一般不采用nfs,多用于测试. nfs搭建步骤大致分为如下: 1.划盘 给节点1挂载一块磁盘,并将磁盘分区,并格式化,再挂载 [root@n ...

  4. 搭建Mantis 缺陷管理系统(转)

    转自 什么是Mantis MantisBT is a free popular web-based bugtracking system (feature list). It is written i ...

  5. SSH框架应用解析

    一.什么是SSH SSH 不仅仅只是一个框架,而是由多个框架集成而来,是 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架,结构清晰.可复用性好. ...

  6. android 获取文件夹、文件的大小 以B、KB、MB、GB 为单位

    android 获取文件夹.文件的大小 以B.KB.MB.GB 为单位   public class FileSizeUtil { public static final int SIZETYPE_B ...

  7. hdu1010 dfs+奇偶性减枝

    Tempter of the Bone Problem Description The doggie found a bone in an ancient maze, which fascinated ...

  8. [技术学习]js接口继承

    js是面向对象语言,但是js又缺乏了面向对象的诸多特性,比如继承,没有接口继承也没有父类继承,因此有时候需要人工来实现继承. 一.首先看下java中面向对象的继承: //定义类鸟类的飞行动作 inte ...

  9. Scau 8633 回文划分 mancher + dp

    时间限制:1000MS 内存限制:1000K 提交次数: 通过次数: 题型: 编程题 语言: G++;GCC Description 我们说一个字符串是回文串,那么意味着这个串从两边读起来的字母都是一 ...

  10. 4、delphi record数组复制

    SetLength(OldDeptInfo,0); //释放旧数组 OldDeptInfo:=nil; 这样也可以: //SetLength(OldDeptInfo,Length(NewDeptInf ...