标签:洛谷 树状 int long P3368 数组 500005
树状数组加差分的应用。(线段树也可以这么用)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m; 4 long long t[500005]; 5 int lowbit(int x) {return x&(-x);} 6 7 void add(int x,long long k){ 8 while(x<=n){ 9 t[x]+=k; 10 x+=lowbit(x); 11 } 12 } 13 14 long long query(int x){ 15 long long ans=0; 16 while(x){ 17 ans+=t[x]; 18 x-=lowbit(x); 19 } 20 return ans; 21 } 22 23 int main(){ 24 scanf("%d%d",&n,&m); 25 long long last=0,now; 26 for(int i=1;i<=n;i++){ 27 scanf("%lld",&now); 28 add(i,now-last);//差分 29 last=now; 30 } 31 int opt; 32 while(m--){ 33 scanf("%d",&opt); 34 if(opt==1){ 35 int x,y;long long k; 36 scanf("%d%d%lld",&x,&y,&k); 37 add(x,k);add(y+1,-k); 38 } 39 else{ 40 int x; 41 scanf("%d",&x); 42 printf("%lld\n",query(x));//查询1~x的和就是x位置上的数值 43 } 44 } 45 }
标签:洛谷,树状,int,long,P3368,数组,500005 来源: https://www.cnblogs.com/yhxnoerror/p/16339627.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。