Pagini recente » Cod sursa (job #2731814) | Cod sursa (job #946814) | Cod sursa (job #1907929) | Cod sursa (job #2227386) | Cod sursa (job #2313414)
#include <bits/stdc++.h>
#define Dim 100006
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N,M,AIB[Dim],dif;
int op,a,b;
void Update(int it)
{
do
{
AIB[it]+=dif;
it+= it & -it;
}while(it<=N);
}
int SUM(int it)
{
int s=0;
while(it)
{
s+=AIB[it];
it&=it-1;
}
return s;
}
int main()
{
f>>N>>M;
for(int i=1;i<=N;i++)
{
f>>a;
dif=a;
Update(i);
}
for(int i=1;i<=M;i++)
{
f>>op;
if(op==0)
{
f>>a>>b;
dif=b;
Update(a);
}
else
if(op==1)
{
f>>a>>b;
g<<SUM(b)-SUM(a-1)<<'\n';
}
else
{
f>>a;
bool stop=0;
for(int i=1;i<=N;i*=2)
if(SUM(i)==a)
{
g<<i<<'\n';
stop=1;
}
if(stop==0) g<<-1<<'\n';
}
}
return 0;
}