Pagini recente » Cod sursa (job #786672) | Cod sursa (job #1508440) | Cod sursa (job #898727) | Cod sursa (job #1105708) | Cod sursa (job #2867594)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N=100010;
int n,m,op,aib[N];
void adun(int i,int v)
{
for(;i<=n;i+=i&(-i))
aib[i]+=v;
}
int suma(int i)
{
int sol=0;
for(;i;i-=i&(-i))
sol+=aib[i];
return sol;
}
int suma(int a,int b)
{
return suma(b)-suma(a-1);
}
int main()
{
f>>n>>m;
for(int i=1;i<=i;i++)
{
int x;
f>>x;
adun(i,x);
}
for(int i=1;i<=m;i++)
{
f>>op;
if(op==0)
{
int x,y;
f>>x>>y;
adun(x,y);
}
else
if(op==1)
{
int a,b;
f>>a>>b;
g<<suma(a,b)<<'\n';
}
else
{
int lo=0,hi=n,mi,a;
f>>a;
while(hi-lo>1)
{
mi=(hi+lo)/2;
if(suma(mi)<a)
lo=mi;
else
hi=mi;
}
if(suma(hi)==a)
g<<hi<<'\n';
else
g<<"-1\n";
}
}
return 0;
}
//
//class punct
//{
// int x,y;
//public:
// punct()
// {
// x=y=0;
// }
// punct(int _x,int _y)
// {
// x=_x;y=_y;
// }
// int getX()
// {
// return x;
// }
// int getY()
// {
// return y;
// }
// void setX(int _x)
// {
// x=_x;
// }
// void setY(int _y)
// {
// y=_y;
// }
//};