Pagini recente » Cod sursa (job #2699577) | Cod sursa (job #1046553) | Cod sursa (job #370572) | Cod sursa (job #2727927) | Cod sursa (job #2305593)
#include <bits/stdc++.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int n,a[100002];
void update(int i,int nr)
{
while(i<=n)
{
a[i]+=nr;
i+=(i&(-i));
}
}
int q(int i)
{
int s=0;
while(i)
{
s+=a[i];
i-=(i&(-i));
}
return s;
}
int src(int nr)
{
int pas=1<<17,r=0,nrr=nr;
while(pas)
{
if(r+pas<=n&&a[r+pas]<nr)
{
r+=pas;
nr-=a[r];
}
pas>>=1;
}
if(q(r+1)!=nrr)
return -1;
return r+1;
}
int main()
{
int m,i,j,nr;
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>nr;
update(i,nr);
}
while(m--)
{
in>>nr>>i;
if(nr==0)
{
in>>j;
update(i,j);
}
else if(nr==1)
{
in>>j;
out<<q(j)-q(i-1)<<"\n";
}
else
out<<src(i)<<"\n";
}
return 0;
}