Pagini recente » Cod sursa (job #59544) | Cod sursa (job #1959853) | Cod sursa (job #1619807) | Cod sursa (job #436449) | Cod sursa (job #2040818)
#include <fstream>
#define DEF 100001
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n, m, v[DEF];
void update (int p, int x) {
for (; p <= n; p += (p & -p)) {
v[p] += x;
}
}
int querry (int p) {
int r = 0;
for (; p; p -= (p & -p)) {
r += v[p];
}
return r;
}
int querry_i (int a, int b) {
if (a == 1)
return querry (b);
else {
return querry (b) - querry (a - 1);
}
}
int caut_b (int x) {
int mid, st = 1, dr = n;
while (st < dr) {
mid = (st + dr) / 2;
int t = querry (mid);
if (t == x) {
while (querry (mid - 1) == x) {
mid--;
}
return mid;
}
if (t < x)
st = mid + 1;
else
if (t > x)
dr = mid - 1;
}
}
int main () {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
fin >> x;
update (i, x);
}
for (int i = 1; i <= m; i++) {
int x, y, z;
fin >> x >> y;
if (x == 0) {
fin >> z;
update (y, z);
}
if (x == 1) {
fin >> z;
fout << querry_i (y, z) << "\n";
}
if (x == 2) {
fout << caut_b (y) << "\n";
}
}
return 0;
}