Pagini recente » Cod sursa (job #2219658) | Cod sursa (job #2605640) | Cod sursa (job #2757753) | Cod sursa (job #527351) | Cod sursa (job #1459832)
#include<fstream>
using namespace std;
#define MAX 100001
int AIB[MAX],N,M;
ifstream in("aib.in");
ofstream out("aib.out");
void modify(int p,int value)
{
while(p <=N)
{
AIB[p]+=value;
p+=p&(-p);
}
}
int get_Sum(int p)
{
int S=0;
while(p)
{
S+=AIB[p];
p-=p&(-p);
}
return S;
}
int main()
{
in>>N>>M;
int el;
for(int i=1;i<=N;i++)
{
in>>el;
modify(i,el);
}
int op,a,b;
for(int i=1;i<=M;i++)
{
in>>op;
if(op==0)
{
in>>a>>b;
modify(a,b);
}
else if(op==1)
{
in>>a>>b;
out<<get_Sum(b) - get_Sum(a-1)<<endl;
}
else
{
in>>a;
int l=1,r=N,mij,S;
int k=1<<30;
while(l<=r)
{
mij=(l+r)/2;
S=get_Sum(mij);
if(S==a)
{
k=mij;
r=mij-1;
}
else if(S < a)
l=mij+1;
else
r=mij-1;
}
if(k==1<<30)
out<<-1<<endl;
else
out<<k<<endl;
}
}
return 0;
}