Pagini recente » Cod sursa (job #1420596) | Cod sursa (job #1515215) | Cod sursa (job #1750906) | Cod sursa (job #2493278) | Cod sursa (job #2243857)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[132000];
int n, m, x, q, a, b;
void apdate(int pos, int val) {
while (pos <= n) {
aib[pos] += val;
pos += pos & (-pos);
}
}
int sum(int pos) {
if (pos == 0) return 0;
return aib[pos] + sum(pos - (pos & (-pos)));
}
int findPos(int left, int right, int s) {
int mij = (left + right) / 2;
int aux = sum(mij);
if (aux == s) return mij;
if (left == right) return -1;
if (s <= aux) return findPos(left, mij, s);
else return findPos(mij + 1, right, s);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> x;
apdate(i, x);
}
for (int i = 1; i <= m; i++) {
fin >> q;
switch (q) {
case 0: {
fin >> a >> b;
apdate(a, b);
} break;
case 1: {
fin >> a >> b;
fout << sum(b) - sum(a - 1) << '\n';
} break;
case 2: {
fin >> a;
fout << findPos(1, n, a) << '\n';
}
}
}
return 0;
}