Submission #502572

#TimeUsernameProblemLanguageResultExecution timeMemory
502572uncriptedAddk (eJOI21_addk)C++11
36 / 100
2090 ms2808 KiB
#include<bits/stdc++.h> using namespace std; long long pre[100005]; long long n,k; void update(long long l, long long r, long long x){ for(long long i=l; i<=r; i++){ long long tr=i; while(tr<=n){ pre[tr]+=x; tr+=tr&(-tr); } } } long long sum(long long l){ long long s=0; while(l>0){ s+=pre[l]; l-=l&(-l); } return s; } int main(){ cin>>n>>k; long long a[n+1]; long long prefix=0; for(long long i=1; i<=n; i++){ cin>>a[i]; prefix+=a[i]; update(i,i, prefix); } long long q; cin>>q; while(q--){ long long x; cin>>x; if(x==1){ long long b[k+1]; for(long long i=1; i<=k; i++){ cin>>b[i]; } update(b[k], n, a[b[k]]-a[b[1]]); for(long long i=1; i<k; i++){ update(b[i], n, a[b[i]]-a[b[i+1]]); } continue; } long long l,r,m; cin>>l>>r>>m; long long s=0; s+=sum(r)-sum(l+m-2); s-=sum(r-m)-sum(l-2); cout<<s<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...