Pagini recente » Cod sursa (job #1926696) | Cod sursa (job #3134353) | Cod sursa (job #2252250) | Cod sursa (job #2558403) | Cod sursa (job #2567073)
#include <iostream>
#include<fstream>
int s[100001], 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, 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>>a;
if(c==0 || c==1) {
fin>>b;
if(c==0) {
solve(a, b);
}
if(c==1) {
fout<<query(b)-query(a-1)<<endl;
}
}
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<<endl;
}
else {
fout<<"-1"<<endl;
}
}
}
}
return 0;
}