Pagini recente » Cod sursa (job #2498472) | Cod sursa (job #131393) | Cod sursa (job #1578329) | Cod sursa (job #2159113) | Cod sursa (job #2020622)
#include <bits/stdc++.h>
#define zeros(x) ((x^(x-1))&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;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=1,dr=n,mid;
while(st<=dr){
mid=(st+dr)/2;
if(getIntv(mid)==sum)
return mid;
if(getIntv(mid)<sum) st=mid;
else dr=mid;
}
}
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);
}
if(aux==1){
fin>>a>>b;
fout<<getIntv(b)-getIntv(a-1)<<'\n';
}
if(aux==2){
fin>>a;
fout<<cautBin(a)<<'\n';
}
}
return 0;
}