Pagini recente » Cod sursa (job #841792) | Cod sursa (job #1965633) | Cod sursa (job #446571) | Cod sursa (job #378508) | Cod sursa (job #2020670)
#include <bits/stdc++.h>
#define zeros(x) (x&(-x))
#define DM 100005
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,AIB[DM],a,b,aux;
int getIntv(int dr){
int ans=0;
for(int i=dr;i>0;i-=zeros(i))
ans+=AIB[i];
return ans;
}
void update(int ind,int val){
for(int i=ind;i<=n;i+=zeros(i))
AIB[i]+=val;
}
int cautBin(int sum){
int st=0,dr=n+1,mid;
while(dr-st>1){
mid=(st+dr)/2;
if(getIntv(mid)<=sum) st=mid;
else dr=mid;
}
if(st==n+1 || !st || getIntv(st)!=sum)
return -1;
return st;
}
int main()
{
fin>>n>>m;
for(int i=1;i<=n;++i){
fin>>aux;
update(i,aux);
}
while(m--){
fin>>aux;
if(!aux){
fin>>a>>b;
update(a,b);
}
else if(aux==1){
fin>>a>>b;
fout<<getIntv(b)-getIntv(a-1)<<'\n';
}
else{
fin>>a;
fout<<cautBin(a)<<'\n';
}
}
return 0;
}