AcWing 242. 一个简单的整数问题
给定长度为N的数列A,然后输入M行操作指令。
第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。
第二类指令形如“Q X”,表示询问数列中第x个数的值。
对于每个询问,输出一个整数表示答案。
#include<bits/stdc++.h> #define N 1000000 using namespace std; int a[N],b[N]; int n,m; void add(int x,int y){for(;x<=n;x+=x&-x)a[x]+=y;} int ask(int x) { int ans=0; for(;x;x-=x&-x)ans+=a[x]; return ans; } int main() { cin>>n>>m; long long last = 0, now; for (int i=1;i<=n;i++) { scanf("%lld",&now); add(i,now-last); last=now; } for(int i=1;i<=m;i++) { char x; cin>>x; if(x=='C'){int a,b,c;cin>>a>>b>>c;add(a,c);add(b+1,-c);} else{int y;cin>>y;cout<<ask(y)<<endl;} } return 0; }

浙公网安备 33010602011771号