Pagini recente » Cod sursa (job #3146015) | Cod sursa (job #560646) | Cod sursa (job #2639191) | Cod sursa (job #2056681) | Cod sursa (job #2213715)
#include<fstream>
#include<unordered_map>
#include<algorithm>
#include<string.h>
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
int AIB[200010];
int N;
void update(int x, int val)
{
for(;x<=N;x+=x&(-x))
AIB[x]+=val;
}
int query(int x)
{
int sum = 0;
for (; x; x -= x & (-x))
sum += AIB[x];
return sum;
}
int caut_bin(int s)
{
int l = 1, r = N;
while (l <= r)
{
int mid = (l + r) >> 1;
int q = query(mid);
if (q > s)
r = mid - 1;
else
l = mid + 1;
}
if (l > r)
return -1;
else
return r;
}
int main()
{
int N, Q;
cin >> N;
for (int i = 1; i <= N; ++i)
{
int val;
cin >> val;
update(i, val);
}
for (int i = 1; i <= Q; ++i)
{
int op;
cin >> op;
if (op == 0)
{
int x, y;
cin >> x >> y;
update(x, y);
}
else if (op == 1)
{
int x, y;
cin >> x >> y;
cout << query(y) - query(x - 1) << "\n";
}
else
{
int k;
cin >> k;
cout << caut_bin(k) << "\n";
}
}
return 0;
}