Pagini recente » Cod sursa (job #1471161) | Cod sursa (job #2295242) | Cod sursa (job #701882) | Cod sursa (job #1707831) | Cod sursa (job #1228210)
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n,m,x,y,op,i,p,k;
int v[100010];
int lsb (int i) {
return i&(-i);
}
void update (int poz, int x) {
for (int i=poz;i<=n;i+=lsb(i))
v[i]+=x;
}
int query (int poz) {
int sum=0;
for (int i=poz;i>=1;i-=lsb(i))
sum+=v[i];
return sum;
}
int cautb () {
int st,dr,mid;
st=1;dr=n;
while (st<=dr) {
mid=(st+dr)/2;
if (query(mid)<k)
st=mid+1;
else
dr=mid-1;
}
if (query (st)!=k)
return -1;
return st;
}
int main () {
fin>>n>>m;
for (i=1;i<=n;i++) {
fin>>x;
update (i,x);
}
while (m--){
fin>>op;
if(op==2){
fin>>k;
fout<<cautb()<<"\n";
}else{
fin>>x>>y;
if (op==0)
update (x,y);
else
fout<<query(y)-query(x-1)<<"\n";
}
}
return 0;
}