Pagini recente » Cod sursa (job #3283798) | Cod sursa (job #1661294) | Cod sursa (job #1772430) | Cod sursa (job #39991) | Cod sursa (job #1909261)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int nmax = 100005;
int N,M,aib[nmax];
inline void Update(int p, int x)
{
while(p <= N)
{
aib[p] += x;
p += (p & (-p));
}
}
inline int Query(int p)
{
int s = 0;
while(p)
{
s += aib[p];
p -= (p & (-p));
}
return s;
}
inline int BS(int x)
{
int st,dr,mid,sol = -1,vv;
st = 1; dr = N;
while(st <= dr)
{
mid = (st + dr) >> 1;
vv = Query(mid);
if(vv == x) return mid;
if(vv > x) dr = mid-1;
else st = mid+1;
}
return sol;
}
int main()
{
int tip,i,x,a,b;
fin >> N >> M;
for(i = 1; i <= N; i++)
{
fin >> x;
Update(i,x);
}
while(M--)
{
fin >> tip >> a;
if(tip == 2) fout << BS(a) << "\n";
else
{
fin >> b;
if(tip) fout << Query(b) - Query(a-1) << "\n";
else Update(a,b);
}
}
fout.close();
return 0;
}