Pagini recente » Cod sursa (job #281881) | Cod sursa (job #368005) | Cod sursa (job #2218597) | Cod sursa (job #1232072) | Cod sursa (job #2537198)
#include <bits/stdc++.h>
using namespace std;
int n,m,v[1005],aib[1005];
int lsb (int nr) {
return (nr & (nr-1));
}
void build_aib () {
for(int i=1;i<=n;++i)
aib[i]=v[i]-v[i-lsb(i)];
}
void updatee (int poz, int nr) {
while(poz<=n) {
aib[poz]+=nr;
poz=poz+lsb(poz);
}
}
int querrys (int dr) {
int suma=0;
while(dr>0) {
suma+=aib[dr];
dr=dr-lsb(dr);
}
return suma;
}
int querrys1 (int nr) {
int i=0,step=1;
for(;(step<<1)<=n;step<<=1);
for(;step>0;step>>=1)
if(i+step<=n && querrys(i+step)<nr)
i+=step;
return i+1;
}
int main () {
int q,nr1,nr2;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d", &n, &m);++m;
for(int i=1;i<=n;++i)
scanf("%d", &v[i]),v[i]+=v[i-1];
build_aib();
while(--m) {
scanf("%d", &q);
if(q==0)
scanf("%d%d", &nr1, &nr2),updatee(nr1,nr2),cout<<1;
else if (q==1)
scanf("%d%d", &nr1, &nr2),printf("%d\n", (querrys(nr2)-querrys(nr1-1))),cout<<1;
else {
scanf("%d", &nr1);
if(querrys(querrys1(nr1))==nr1)
printf("%d\n", querrys1(nr1));
else
printf("-1\n");
cout<<1;
}
}
return 0;
}