Pagini recente » Cod sursa (job #1585268) | Cod sursa (job #2581866) | Cod sursa (job #524433) | Cod sursa (job #930010) | Cod sursa (job #3256396)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,t,v[100005],aib[100005];
void adun(int x,int s){
for (int i=x;i<=n;i+=i&(-i))
aib[i]+=s;
}
int suma(int x){
int s=0;
for (int i=x;i>=1; i-=i&(-i))
s+=aib[i];
return s;
}
int main()
{
fin>>n>>t;
for (int i=1;i<=n;i++){
fin>>v[i];
adun(i,v[i]);
}
for (;t;--t){
int op;
fin>>op;
if (op==0) {
int x,p;
fin>>x>>p;
adun(x,p);
}
else if (op==1) {
int a,b;
fin>>a>>b;
fout<<suma(b)-suma(a-1)<<'\n';
}
else if (op==2) {
int k;
fin>>k;
int st=1,dr=n,mij,sol=-1;
while (st<=dr){
mij=(st+dr)/2;
int s=suma(mij);
if (s==k) sol=mij,st=dr+1;
else if (s<k) st=mij+1;
else dr=mij-1;
}
fout<<sol<<'\n';
}
}
return 0;
}