Pagini recente » Cod sursa (job #90839) | Cod sursa (job #253475) | Cod sursa (job #2899024) | Cod sursa (job #2670477) | Cod sursa (job #1895660)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int NMAX = 100005;
int n, queries;
int BIT[NMAX];
int getSum(int idx) {
int sum = 0;
while (idx > 0) {
sum += BIT[idx];
idx -= (idx & -idx);
}
return sum;
}
void update(int idx, int val) {
while (idx <= n) {
BIT[idx] += val;
idx += (idx & -idx);
}
}
int binarySearch(int val) {
int step, i;
for (step = 1; step < n; step <<= 1) ;
for (i = 0; step; step >>= 1)
if (i + step <= n && BIT[i + step] <= val) {
i += step;
val -= BIT[i];
if (!val)
return i;
}
return -1;
}
int main() {
fin >> n >> queries;
for (int i = 0; i < n; ++ i) {
int temp;
fin >> temp;
update(i + 1, temp);
}
for (int i = 0; i < queries; ++ i) {
int task, x, y;
fin >> task;
switch(task) {
case 0:
fin >> x >> y;
update(x, y);
break;
case 1:
fin >> x >> y;
fout << getSum(y) - getSum(x - 1) << "\n";
break;
case 2:
fin >> x;
fout << binarySearch(x) << "\n";
break;
}
}
fin.close();
fout.close();
return 0;
}