Pagini recente » Cod sursa (job #2797593) | Cod sursa (job #2093150) | Cod sursa (job #2981712) | Cod sursa (job #1135178) | Cod sursa (job #2313429)
#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;
int st=1,dr=N,mij;
while(st<=dr&&stop==0)
{
mij=(st+dr)/2;
int rez=SUM(mij);
if(rez>a) dr=mij-1;
else
if(rez<a) st=mij+1;
else
if(rez==a)
{
g<<mij<<'\n';
stop=1;
}
}
if(stop==0) g<<-1<<'\n';
}
}
return 0;
}