Pagini recente » Cod sursa (job #2442442) | Cod sursa (job #2233197) | Cod sursa (job #1622495) | Cod sursa (job #92821) | Cod sursa (job #1148939)
#include <fstream>
#define maxn 300005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
long long int putere(int x){
return x&(-x);
}
long long int x,arb[maxn],x1,x2,op,n,m,s1,s2,poz;
void update(long long int poz,long long int val){
while(poz<=n){
arb[poz]+=val;
poz+=putere(poz);
}
}
long long int suma( long long int pozitie){
long long int s=0;
while(pozitie>0){
s+=arb[pozitie];
pozitie-=putere(pozitie);
}
return s;
}
long long int search(int a){
long long int s=0,poz=1;
s=arb[poz];
while(s<a && poz<n){
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;
}