Pagini recente » Cod sursa (job #511873) | Cod sursa (job #2276067) | Cod sursa (job #2778583) | Cod sursa (job #2147431) | Cod sursa (job #2646531)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
const int DIM = 100000 + 5;
int a[DIM], fen[DIM];
void add(int node, int val)
{
for(; node <= DIM - 5; node += node & (-node)) {
fen[node] += val;
}
}
int sum(int node)
{
int sol = 0;
for(; node; node -= node & (-node)) {
sol += fen[node];
}
return sol;
}
int main()
{
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; ++i) {
fin >> a[i];
add(i, a[i]);
}
for(int i = 1; i <= m; ++i) {
int type, a, b;
fin >> type;
if(type == 0) {
fin >> a >> b;
add(a, b);
}
if(type == 1) {
fin >> a >> b;
fout << sum(b) - sum(a - 1) << "\n";
}
else if(type == 2) {
fin >> a;
int sum = 0, pos = 0;
for(int x = 16; x >= 0; --x) {
if(pos + 1 << x <= n && sum + fen[pos + 1 << x] <= a) sum += fen[pos + 1 << x], pos += 1 << x;
}
if(sum == a) fout << pos << "\n";
else fout << "-1" << "\n";
}
}
return 0;
}