Pagini recente » Cod sursa (job #330240) | Cod sursa (job #902970) | Cod sursa (job #236060) | Cod sursa (job #371762) | Cod sursa (job #1144611)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int maxn = 100000;
int AIB[maxn];
int n;
int lsb(const int &x)
{
return x&(-x);
}
void Update(int poz,int val)
{
for( ; poz <= n ; poz += lsb(poz) )
AIB[poz]+=val;
}
int Query(int poz)
{
int Ans=0;
for( ; poz ; poz -= lsb(poz))
Ans+=AIB[poz];
return Ans;
}
int BS(int x)
{
int i=n,step;
for(step = 1 ; step <= n ; step <<= 1);
for( ; step ; step >>= 1)
if( i-step >= 1 && Query(i-step) >= x)
i-=step;
if(Query(i)==x)
return i;
return -1;
}
int main()
{
int tip,i,m,x,y;
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>x;
Update(i,x);
}
while(m--)
{
in>>tip;
if(!tip)
{
in>>x>>y;
Update(x,y);
}
else
if(tip==1)
{
in>>x>>y;
out<<Query(y)-Query(x-1)<<"\n";
}
else
{
in>>x;
out<<BS(x)<<"\n";
}
}
return 0;
}