Pagini recente » Cod sursa (job #497126) | Cod sursa (job #1431208) | Cod sursa (job #2483017) | Cod sursa (job #1641094) | Cod sursa (job #642424)
Cod sursa(job #642424)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int arb[100005] , N , M , setv;
void update(int idx,int val)
{
for(;idx<=N;idx+=(idx & -idx))
arb[idx]+=val;
}
int query(int idx)
{
int s;
for(s = 0;idx>0;idx-=(idx & -idx))
s+=arb[idx];
return s;
}
void compute()
{
for(setv = 1;setv<N;setv<<=1);
}
int search(int val)
{
for(int i = 0 , steps = setv;steps;steps>>=1)
{
if(i + steps<=N)
if(val >= arb[i+steps])
{
i += steps , val -= arb[i];
if(!val) return i;
}
}
return -1;
}
int main()
{
int tip , x , y ;
fin>>N>>M;
compute();
for(int i=1;i<=N;++i)
fin>>x , update(i,x);
for(;M;M--)
{
fin>>tip;
if(tip == 2)
{
fin>>x;
fout<<search(x)<<'\n';
}
else
{
fin>>x>>y;
if(tip == 0) update(x,y);
else
fout<<query(y) - query(x-1)<<'\n';
}
}
return 0;
}