Pagini recente » Cod sursa (job #460412) | Cod sursa (job #234006) | Cod sursa (job #1856589) | Cod sursa (job #3172646) | Cod sursa (job #1590085)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n, queries, elem[NMax], BIT[2 * NMax];
void updateBIT(int pos, int val)
{
while (pos <= n) {
BIT[pos] += val;
pos += (pos & (-pos));
}
}
int getSum(int pos)
{
int answ = 0;
while (pos > 0) {
answ += BIT[pos];
pos -= (pos & (-pos));
}
return answ;
}
int binSrc(int sum)
{
int st = 1;
int dr = n;
int answ = -1;
while (st <= dr) {
int mid = (st + dr) / 2;
if (sum <= getSum(mid)) {
dr = mid - 1;
answ = mid;
}
else
st = mid + 1;
}
return answ;
}
int main()
{
f >> n >> queries;
for (int i = 1; i <= n; i++) {
f >> elem[i];
updateBIT(i, elem[i]);
}
int cmd, x, y;
for (int i = 1; i <= queries; i++) {
f >> cmd;
if (cmd == 0) {
f >> x >> y;
updateBIT(x, y);
}
else if (cmd == 1) {
f >> x >> y;
g << getSum(y) - getSum(x - 1) << "\n";
}
else {
f >> x;
g << binSrc(x) << "\n";
}
}
}