Pagini recente » Cod sursa (job #2250888) | Cod sursa (job #2592527) | Cod sursa (job #348772) | Cod sursa (job #1240409) | Cod sursa (job #1473268)
#include <fstream>
#define NMAX 100000
using namespace std;
int v[NMAX+1], n, m, op, a, b;
ifstream f("aib.in");
ofstream g("aib.out");
void Update(int i, int x)
{ while (i<=n)
{ v[i]+=x;
i+=(i&-i);
}
}
int Sum(int i)
{ int s=0;
while (i)
{ s+=v[i];
i=i&(i-1);
}
return s;
}
int BinSearch(int x)
{ int incr=1;
while (incr<=n)
incr<<=1;
int poz=0;
while (incr)
{ if (incr+poz<=n)
{ if (v[incr]<=x)
{ x-=v[incr];
poz+=incr;
if (x==0)
return poz;
}
}
incr>>=1;
}
return -1;
}
int main()
{ f>>n>>m;
int i;
for (i=1; i<=n; ++i)
{ int x;
f>>x;
Update(i, x);
}
for (; m; --m)
{ f>>op;
if (op==0)
{ f>>a>>b;
Update(a, b);
}
else
{ if (op==1)
{ f>>a>>b;
g<<Sum(b)-Sum(a-1)<<'\n';
}
else
{ f>>a;
g<<BinSearch(a)<<'\n';
}
}
}
return 0;
}