Pagini recente » Cod sursa (job #2415032) | Cod sursa (job #2413831) | Cod sursa (job #2025197) | Cod sursa (job #38569) | Cod sursa (job #641332)
Cod sursa(job #641332)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int arb[100001] , N , M;
void update(int poz,int val)
{
for(int C = 0; poz <= N;C++)
{
arb[poz]+=val;
while(!(poz & (1<<C))) C++;
poz+=(1<<C);
}
}
int query(int poz)
{
int S = 0;
for(int C = 0;poz > 0; C++)
{
S += arb[poz];
while(!(poz & (1<<C))) C++;
poz-=(1<<C);
}
return S;
}
int search(int val)
{
int steps = 1;
for(;steps < N;steps<<=1);
for(int i = 0;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;
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;
}