Pagini recente » Cod sursa (job #889744) | Cod sursa (job #1944879) | Cod sursa (job #2906048) | Cod sursa (job #2388064) | Cod sursa (job #2366091)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
const int Nmax = 1e5 + 5;
int aib[Nmax] , n , Q;
inline void Update(int p , int x)
{
while(p <= n)
{
aib[p] += x;
p += (p & (-p));
}
}
inline int Sum(int p)
{
int sum = 0;
while(p >= 1)
{
sum += aib[p];
p -= (p & (-p));
}
return sum;
}
int main()
{
int x , p , L , R , poz , m , op;
fin >> n >> Q;
for(int i = 1 ; i <= n ; i++)
fin >> x , Update(i , x);
while(Q -- )
{
fin >> op;
if(op == 0)
{
fin >> p >> x;
Update(p , x);
}
else if(op == 1)
{
fin >> p >> x;
fout << Sum(x) - Sum(p - 1) << "\n";
}
else
{
fin >> x;
L = 1;
R = n;
poz = -1;
while(L <= R)
{
m = (L + R) / 2;
p = Sum(m);
if(p == x)
poz = m , R = m - 1;
else if(p < x)
L = m + 1;
else R = m - 1;
}
fout << poz << "\n";
}
}
fin.close();
fout.close();
}