Pagini recente » Cod sursa (job #2275919) | Cod sursa (job #659360) | Cod sursa (job #1092541) | Cod sursa (job #838541) | Cod sursa (job #2829281)
#include <fstream>
using namespace std;
int n,aib[100010];
ifstream cin ("aib.in");
ofstream cout ("aib.out");
void update(int nod,int val)
{
int i;
for (i=nod; i<=100000; i=i+(i&(-i)))
aib[i]=aib[i]+val;
}
int query(int nod)
{
int i,s;
if (nod==0)
return 0;
s=0;
for (i=nod; i>=1; i=i-(i&(-i)))
s=s+aib[i];
return s;
}
int cb(int x)
{
int s,r,pas;
s=0;
r=0;
pas=1<<17;
while (pas!=0)
{
if (r+pas<=n && s+aib[r+pas]<=x)
{
s=s+aib[r+pas];
r=r+pas;
if (s==x)
return r;
}
pas=pas>>1;
}
return -1;
}
int main()
{
int m,i,x,y,tip;
cin>>n>>m;
for (i=1; i<=n; i++)
{
cin>>x;
update(i,x);
}
for (i=1; i<=m; i++)
{
cin>>tip>>x;
if (tip==0)
{
cin>>y;
update(x,y);
}
if (tip==1)
{
cin>>y;
cout<<query(y)-query(x-1)<<"\n";
}
if (tip==2)
cout<<cb(x)<<"\n";
}
return 0;
}