Pagini recente » Cod sursa (job #1688977) | Cod sursa (job #3313562) | Cod sursa (job #3318932) | Cod sursa (job #1335845) | Cod sursa (job #3322767)
#include <iostream>
#include <random>
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100005];
int n,q;
void update(int pos, int val) {
for (; pos<=n; pos+=(pos&-pos))
aib[pos]+=val;
}
int sum(int pos) {
int s=0;
for (; pos>=1; pos-=(pos&-pos))
s+=aib[pos];
return s;
}
int cb(int val) {
int st=1,dr=n;
int sol=-1;
while (st<=dr) {
int mij=(st+dr)/2;
if (sum(mij)==val)
sol=mij,dr=mij-1;
else if (sum(mij)>val)
dr=mij-1;
else
st=mij+1;
}
return sol;
}
int main() {
fin>>n>>q;
for (int i=1; i<=n; i++) {
int x;
fin>>x;
update(i,x);
}
while (q--) {
int tip;
fin>>tip;
if (tip==0) {
int x,y;
fin>>x>>y;
update(x,y);
}
else if (tip==1) {
int x,y;
fin>>x>>y;
fout<<sum(y)-sum(x-1)<<"\n";
}
else {
int x;
fin>>x;
fout<<cb(x)<<"\n";
}
}
return 0;
}