Pagini recente » Cod sursa (job #1351105) | Cod sursa (job #1807454) | Cod sursa (job #1655149) | Cod sursa (job #1613131) | Cod sursa (job #2567108)
#include <iostream>
#include<fstream>
int s[100005], n;
int len(int x) {
return x-(x&(x-1));
}
int query(int pz) {
int sum=0;
while(pz>0) {
sum+=s[pz];
pz=pz-len(pz);
}
return sum;
}
void solve(int pz, int val) {
while(pz<=n) {
s[pz]+=val;
pz+=len(pz);
}
}
using namespace std;
int main() {
int m, a, b, i, nr, c, p, j, l, med;
ifstream fin("aib.in");
ofstream fout("aib.out");
fin>>n>>m;
for(i=1;i<=n;i++) {
fin>>nr;
solve(i, nr);
}
for(i=1;i<=m;i++) {
fin>>c;
if(c==0 || c==1) {
fin>>a>>b;
if(c==0) {
solve(a, b);
}
if(c==1) {
fout<<query(b)-query(a-1)<<"\n";
}
}
else {
fin>>a;
if(a==0)
fout<<"-1";
else {
l=0;
med=1<<20;
while(med) {
if(l+med<=n && a>=s[l+med]) {
l=l+med;
a=a-s[l];
}
med=med/2;
}
if(a==0)
fout<<l;
else
fout<<"-1";
}
fout<<"\n";
}
}
return 0;
}