Pagini recente » Cod sursa (job #2493043) | Cod sursa (job #3150306) | Istoria paginii runda/blabla | Cod sursa (job #3150791) | Cod sursa (job #2802246)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,i,op,x,y,a[100001];
void update(int p,int x) {
for (int i=p;i<=n;i+=(i&-i))
a[i]+=x;
}
int query(int p) {
int s=0;
for (int i=p;i>=1;i-=(i&-i))
s+=a[i];
return s;
}
int cautbin(int x) {
int st=1;
int dr=n;
while (st<=dr) {
int mid=(st+dr)/2;
int s=query(mid);
if (x==s)
return mid;
if (x>s)
st=mid+1;
else
dr=mid-1;
}
return -1;
}
int main() {
fin>>n>>m;
for (i=1;i<=n;i++) {
fin>>x;
update(i,x);
}
for (i=1;i<=m;i++) {
fin>>op;
if (op==0) {
fin>>x>>y;
update(x,y);
}
else
if (op==1) {
fin>>x>>y;
fout<<query(y)-query(x-1)<<"\n";
}
else {
fin>>x;
fout<<cautbin(x)<<"\n";
}
}
return 0;
}