Pagini recente » Cod sursa (job #2988948) | Cod sursa (job #1361414) | Monitorul de evaluare | Cod sursa (job #57780) | Cod sursa (job #2991212)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100000],n,m,t,x,a,b,st,dr,mid;
void adun(int x,int a)
{
for(int i=x;i<=n;i+=(i&-i))aib[i]+=a;
}
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>>m;
for(int i=1;i<=n;i++)
{
fin>>x;
adun(i,x);
}
while(m)
{
m--;
fin>>t;
if(t==0)
{
fin>>a>>b;
adun(a,b);
}
if(t==1)
{
fin>>a>>b;
fout<<suma(b)-suma(a-1)<<'\n';
}
if(t==2)
{
fin>>a;
st=1;dr=n;
while(st<=dr)
{
mid=(st+dr)/2;
if(suma(mid)>a)dr=mid-1;
else st=mid+1;
}
fout<<st-1<<'\n';
}
}
return 0;
}