Pagini recente » Cod sursa (job #1895819) | Cod sursa (job #546580) | Cod sursa (job #1334015) | Cod sursa (job #2159808) | Cod sursa (job #3151767)
#include <bits/stdc++.h>
using namespace std;
ifstream fin;
ofstream fout;
int N;
vector<int> arr(1e5+5, 0);
vector<int> bit(1e5+5, 0);
void update(int i, int val) {
while(i <= N) {
bit[i] += val;
i += (i & (-i));
}
}
int prefixSum(int i) {
int sum = 0;
while(i > 0) {
sum += bit[i];
i -= (i & (-i));
}
return sum;
}
int rangeSum(int i, int j) {
return prefixSum(j) - prefixSum(i - 1);
}
int main()
{
int M;
fin.open("aib.in");
fin >> N;
fin >> M;
int comanda;
int a, b;
for(int i = 1; i <= N; i++) {
fin >> arr[i];
update(i, arr[i]);
}
fout.open("aib.out");
for(int i = 1; i <= M; i++) {
fin >> comanda;
switch(comanda) {
case 0: {
fin >> a >> b;
update(a, b);
break;
}
case 1: {
fin >> a >> b;
fout << rangeSum(a, b) << endl;
break;
}
case 2: {
int pos = -1;
fin >> a;
int st = 1;
int dr = N;
while(st <= dr) {
int mij = (st + dr) / 2;
int sum = prefixSum(mij);
if(sum == a) {
pos = mij;
break;
}
if(sum > a) {
dr = mij - 1;
} else {
st = mij + 1;
}
}
fout << pos << endl;
break;
}
}
}
fin.close();
fout.close();
return 0;
}