Pagini recente » Cod sursa (job #231329) | Cod sursa (job #2435503) | Cod sursa (job #2425154) | Cod sursa (job #307852) | Cod sursa (job #2646546)
#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 > 0; 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 left = 1, right = n;
while(left <= right) {
int mid = (left + right) >> 1;
if(sum(mid) > a) {
right = mid - 1;
}
else if(sum(mid) < a) {
left = mid + 1;
}
else {
fout << mid << "\n";
break;
}
}
if(left > right) fout << "-1" << "\n";
}
}
return 0;
}