1 solutions
-
0
C++ :
#include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cmath> #define MAXN 100010 using namespace std; int N=0,M=0,M1=0; int Num[MAXN]={0}; long long T1 [MAXN<<2]={0}; inline void Add(int t,long long v){ for(T1[t+=M1]+=v,t>>=1;t;t>>=1){ T1[t]=T1[t<<1]+T1[(t<<1)+1]; } } inline long long Query(int t){ int s=M1; long long Ans=0; for(t=t+M1+1;s^t^1;s>>=1,t>>=1){ if(!(s&1)) Ans+=T1[s^1]; if( (t&1)) Ans+=T1[t^1]; } return Ans; } int main(){ //freopen("sequence.in","r",stdin); //freopen("sequence.out","w",stdout); scanf("%d",&N); for(M1=1;M1<N+2;M1<<=1); for(int i=1;i<=N;++i){ scanf("%d",&Num[i]); T1[i+M1]=Num[i]-Num[i-1]; } for(int i=M1-1;i>=1;--i){ T1[i]=T1[i<<1]+T1[(i<<1)+1]; } scanf("%d",&M); int k,s,t; long long v=0; for(int i=1;i<=M;++i){ scanf("%d",&k); if(k==1){ scanf("%d%d%lld",&s,&t,&v); Add(s,v); if(t+1<=N) Add(t+1,-v); } else{ scanf("%d",&s); printf("%lld\n",Query(s)); } } return 0; }
- 1
Information
- ID
- 17778
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By