Pagini recente » Cod sursa (job #2916294) | Cod sursa (job #308283) | Cod sursa (job #159389) | Cod sursa (job #2378502) | Cod sursa (job #2752312)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int v[100005];
int n, m;
void update(int a, int b)
{
while(a <= n)
{
v[a] += b;
a += (a & (-a));
}
}
int query(int a)
{
int s = 0;
while(a > 0)
{
s += v[a];
a -= (a & (-a));
}
return s;
}
int f2(int a, int b)
{
int st = 1, dr = b;
while(st <= dr)
{
int mij = (st + dr) / 2;
int s = query(mij);
if(s == a)
return mij;
if(s < a)
st = mij + 1;
else
dr = mij - 1;
}
return -1;
}
int32_t main()
{
in >> n >> m;
for(int i = 1; i <= n; i ++)
{
int a;
in >> a;
update(i, a);
}
for(int i = 1; i <= m; i ++)
{
int t, a;
in >> t >> a;
if(t == 2)
{
out << f2(a, n) << '\n';
}
else
{
int b;
in >> b;
if(t == 1)
{
out << query(b) - query(a - 1) << '\n';
}
else
update(a, b);
}
}
return 0;
}