Pagini recente » Cod sursa (job #2523040) | Cod sursa (job #742046) | Cod sursa (job #172145) | Cod sursa (job #587560) | Cod sursa (job #1808445)
#include <fstream>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
void upd(int,int);
int getsum(int);
int n,m,i,x,a,b,c,lo,hi,mi,aib[100010];
int main()
{
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>x;
upd(i,x);
}
for(;m;m--)
{
f>>c;
if(!c)
{
f>>a>>b;
upd(a,b);
continue;
}
if(c==1)
{
f>>a>>b;
g<<getsum(b)-getsum(a-1)<<'\n';
continue;
}
f>>a;
if(getsum(n)<a){g<<-1<<'\n';continue;}
lo=0;hi=n;
while(hi-lo-1)
{
mi=(hi+lo)/2;
if(getsum(mi)<a)
lo=mi;
else
hi=mi;
}
if(getsum(hi)==a)
g<<hi<<'\n';
else
g<<-1<<'\n';
}
return 0;
}
int getsum(int p)
{
int s=0;
for(;p;p-=p&(-p))
s+=aib[p];
return s;
}
void upd(int p,int d)
{
for(;p<=n;p+=p&(-p))
aib[p]+=d;
return;
}