Pagini recente » Cod sursa (job #1137234) | Cod sursa (job #2230493) | Cod sursa (job #2139671) | Cod sursa (job #3144477) | Cod sursa (job #2964850)
#include <bits/stdc++.h>
#define FOR(WHATEVER) for(int i = 1; i <= WHATEVER; ++ i)
using namespace std;
/// INPUT / OUTPUT
const string problem = "aib";
ifstream fin(problem + ".in");
ofstream fout(problem + ".out");
/// GLOBAL VARIABLES
const int NMAX = 1e5+5, MOD = 1e9 + 7, INF = 1e9;
int n, q;
int aib[NMAX];
inline void update(int poz, int val)
{
for(int i = poz; i <= n; i += (i&(-i)))
aib[i] += val;
}
inline int query(int x)
{
int suma = 0;
for(int i = x; i >= 1; i-=(i&(-i)))
{
suma += aib[i];
}
return suma;
}
/// READING THE INPUT
int main()
{
ios::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> n >> q;
for(int i = 1; i <= n; ++ i)
{
int num;
fin >> num;
update(i, num);
}
while(q--)
{
int type = 0;
fin >> type;
if(type == 0)
{
int a, b;
fin >> a >> b;
update(a, b);
}
if(type == 1)
{
int a, b;
fin >> a >> b;
fout << query(b) - query(a - 1) << '\n';
}
if(type == 2)
{
int a;
fin >> a;
int st = 1, dr = n, ans = 0;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(query(mid) >= a)
{
dr = mid - 1;
ans = mid;
}
else
{
st = mid + 1;
}
}
if(ans)
fout << ans << '\n';
else
fout << -1 << '\n';
}
}
}