博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(线段树模板)A Simple Problem with Integers --POJ--3468
阅读量:6252 次
发布时间:2019-06-22

本文共 2466 字,大约阅读时间需要 8 分钟。

链接:

 

代码:

1 #include
2 #include
3 #include
4 using namespace std; 5 6 #define Lson r<<1 7 #define Rson r<<1|1 8 9 const int N = 1e5+5; 10 11 struct SegmentTree 12 { 13 int L, R; 14 long long sum, e; 15 int Mid() 16 { 17 return (L+R)>>1; 18 } 19 int len() 20 { 21 return R-L+1; 22 } 23 }a[N<<2]; 24 25 void BuildSegTree(int r, int L, int R) 26 { 27 a[r].L=L, a[r].R=R; 28 a[r].e=0; 29 30 if(L==R) 31 { 32 scanf("%lld", &a[r].sum); 33 return ; 34 } 35 36 BuildSegTree(Lson, L, a[r].Mid()); 37 BuildSegTree(Rson, a[r].Mid()+1, R); 38 39 a[r].sum = a[Lson].sum + a[Rson].sum; 40 } 41 void PushDown(int r) 42 { 43 a[Lson].sum += a[r].e*a[Lson].len(); 44 a[Lson].e += a[r].e; 45 a[Rson].sum += a[r].e*a[Rson].len(); 46 a[Rson].e += a[r].e; 47 48 a[r].e=0; 49 } 50 void Update(int r, int L, int R, int e) 51 { 52 a[r].sum += (R-L+1)*e; 53 54 if(a[r].L==L && a[r].R==R) 55 { 56 a[r].e += e; 57 return ; 58 } 59 60 PushDown(r); 61 62 if(R<=a[r].Mid()) 63 Update(Lson, L, R, e); 64 else if(L>a[r].Mid()) 65 Update(Rson, L, R, e); 66 else 67 { 68 Update(Lson, L, a[r].Mid(), e); 69 Update(Rson, a[r].Mid()+1, R, e); 70 } 71 } 72 long long Query(int r, int L, int R) 73 { 74 if(a[r].L==L && a[r].R==R) 75 return a[r].sum; 76 77 PushDown(r); 78 79 if(R<=a[r].Mid()) 80 return Query(Lson, L, R); 81 else if(L > a[r].Mid()) 82 return Query(Rson, L, R); 83 else 84 { 85 long long Lsum = Query(Lson, L, a[r].Mid()); 86 long long Rsum = Query(Rson, a[r].Mid()+1, R); 87 88 return Lsum+Rsum; 89 } 90 } 91 92 int main() 93 { 94 int n, m; 95 while(scanf("%d%d", &n, &m)!=EOF) 96 { 97 BuildSegTree(1, 1, n); 98 99 while(m--)100 {101 char s[10];102 int L, R, e;103 104 scanf("%s", s);105 106 if(s[0]=='Q')107 {108 scanf("%d%d", &L, &R);109 printf("%lld\n", Query(1, L, R));110 }111 else112 {113 scanf("%d%d%d", &L, &R, &e);114 Update(1, L, R, e);115 }116 }117 }118 return 0;119 }

 

转载于:https://www.cnblogs.com/YY56/p/4689786.html

你可能感兴趣的文章
2017.12.25
查看>>
react--1.创建项目
查看>>
11月20日学习内容整理:jquery插件
查看>>
预科班第四次考核总结
查看>>
html
查看>>
数据分析师到底在做什么?
查看>>
pt-heartbeat工具监控MySQL复制延迟
查看>>
指尖下的js —— 多触式web前端开发之三:处理复杂手势(转)
查看>>
spring boot项目配置文件集合
查看>>
cube-ui的用法
查看>>
2015.4.21 SetWindowPos函数用法
查看>>
2011-12-14 调用cmd并获得输入输出+网络访问
查看>>
TCP定时器详解
查看>>
if判断,switch语句
查看>>
Arduino入门之前
查看>>
zoj 1904 Beavergnaw 计算圆柱和圆台的体积
查看>>
整理了一份招PHP高级工程师的面试题(转)
查看>>
学习Raft算法的笔记
查看>>
第十一周编程总结
查看>>
darknet源码学习
查看>>