Pagini recente » Cod sursa (job #238336) | Cod sursa (job #1226923) | Cod sursa (job #2381158) | Cod sursa (job #3163125) | Cod sursa (job #2553365)
#include <bits/stdc++.h>
#define ubs(x) ((-x)&x)
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,aib[1<<17];
void Update(int poz,int val)
{ for(int i=poz; i<=n; i+=ubs(i))
aib[i]+=val;
}
int Query(int poz)
{ int s=0;
for(int i=poz; i; i-=ubs(i))
s+=aib[i];
return s;
}
int CautBin(int x)
{ int st=1,dr=n;
while(st<=dr)
{ int mij=(st+dr)>>1;
int sum=Query(mij);
if(sum==x)
return mij;
sum<x ? st=mij+1 : dr=mij-1;
}
return -1;
}
int main()
{ f>>n>>m;
for(int x,i=1; i<=n; i++)
{ f>>x;
Update(i,x);
}
for(int t; m; m--)
{ f>>t;
if(t<2)
{ int x,y;
f>>x>>y;
if(!t)
Update(x,y);
else
g<<Query(y)-Query(x-1)<<'\n';
}
else
{ int x;
f>>x;
g<<CautBin(x)<<'\n';
}
}
g.close(); return 0;
}