Pagini recente » Cod sursa (job #912222) | Cod sursa (job #2684322) | Cod sursa (job #2322426) | Cod sursa (job #2030765) | Cod sursa (job #1969339)
#include <fstream>
#define zerouri(x) ((x^(x-1))&x)
#define NMax 100005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int N, M, x, i, a, b, tip, v[NMax];
void Add (int x, int val)
{
for(int i=x; i<=N; i+=zerouri(i))
v[i]+=val;
}
int Query (int x)
{
int ans=0;
for(int i=x; i>0; i-=zerouri(i))
ans+=v[i];
return ans;
}
int Search(int val)
{
int st=1, dr=N, m=(st+dr)/2;
int suma=Query(m);
while(suma!=val && st<=dr)
{
if(suma>val) dr=m-1;
else if(suma<val) st=m+1;
m=(st+dr)/2;
suma=Query(m);
}
if(st>dr) return -1;
return m;
}
int main()
{
f>>N>>M;
for(i=1; i<=N; i++)
{
f>>x;
Add(i,x);
}
for(i=1; i<=M; i++)
{
f>>tip;
if(tip<2)
{
f>>a>>b;
if(tip==0) Add(a,b);
else g<<Query(b)-Query(a-1)<<'\n';
}
else
{
f>>a;
g<<Search(a)<<'\n';
}
}
return 0;
}