Pagini recente » Cod sursa (job #2197225) | Cod sursa (job #2473306) | Cod sursa (job #2163896) | Cod sursa (job #157945) | Cod sursa (job #1148929)
#include <fstream>
#define maxn 300005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int putere(int x){
return x&(-x);
}
int x,arb[maxn],x1,x2,op,n,m,s1,s2,poz;
void update(int poz,int val){
while(poz<=n){
arb[poz]+=val;
poz+=putere(poz);
}
}
int suma(int pozitie){
int s=0;
while(pozitie>0){
s+=arb[pozitie];
pozitie-=putere(pozitie);
}
return s;
}
int search(int a){
long long int s=0,poz=1;
s=arb[poz];
while(s<a){
poz+=putere(poz);
s=arb[poz];
}
if(s==a)
return poz;
else
return -1;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i){
f>>x;
poz=i;
update(poz,x);
}
for(int i=1;i<=m;++i){
f>>op;
if(op==0){
f>>x1>>x2;
update(x1,x2);
}
else
if(op==1){
f>>x1>>x2;
s1=suma(x2);
s2=suma(x1-1);
g<<s1-s2<<"\n";
}
else{
f>>x1;
g<<search(x1);
g<<"\n";
}
}
return 0;
}