Pagini recente » Cod sursa (job #361661) | Cod sursa (job #2178598) | Cod sursa (job #57703) | Cod sursa (job #2447175) | Cod sursa (job #2568640)
#include <bits/stdc++.h>
#define dim 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,tip,a,b,i,x;
int aib[dim];
int query(int poz){
int r=0;
for(;poz;poz-=poz&-poz)
r+=aib[poz];
return r;
}
int update(int poz,int val){
for(;poz<=n;poz+=poz&-poz){
aib[poz]+=val;
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++){
fin>>x;
update(i,x);
}
for(i=1;i<=m;i++){
fin>> tip;
if(tip==0){
fin>>a>>b;
update(a,b);
}else if(tip==1){
fin>>a>>b;
fout<<query(b)-query(a-1)<<"\n";
}
else{
int st=1,dr=n,mid;
fin>>x;
while(st<=dr){
mid=(st+dr)/2;
int q=query(mid);
if(q>=x)
dr=mid-1;
else
st=mid+1;
}
int q=query(st);
if(q!=x)
fout<<-1<<"\n";
else fout<<st<<"\n";
}
}
}