Pagini recente » Cod sursa (job #385406) | Cod sursa (job #1804008) | Cod sursa (job #1017206) | Cod sursa (job #2901474) | Cod sursa (job #2604485)
#include <bits/stdc++.h>
#define DAU ios::sync_with_stdio(false); fin.tie(0); fout.tie(0);
#define PLEC fin.close(); fout.close(); return 0;
using namespace std;
const string problem("aib");
ifstream fin(problem + ".in");
ofstream fout(problem + ".out");
class AIB {
public:
AIB() {}
AIB(int _n) :
n(_n), aib(vector<int>(_n + 1)) {}
inline void Update(int pos, int val) {
for (int i = pos; i <= n; i += i & -i)
aib[i] += val;
}
inline int Query(int pos) {
int sum(0);
for (int i = pos; i >= 1; i -= i & -i)
sum += aib[i];
return sum;
}
inline int Search(int val) {
int st(1), dr(n), mid, curr;
while (st <= dr) {
mid = (st + dr) / 2;
curr = Query(mid);
if (curr == val)
return mid;
if (curr < val)
st = mid + 1;
else dr = mid - 1;
}
return -1;
}
private:
vector<int> aib;
int n;
};
int n, q, op, a, b;
int main() {
DAU
fin >> n >> q;
AIB aib(n);
for (int i = 1; i <= n; ++i) {
fin >> a;
aib.Update(i, a);
}
while (q--) {
fin >> op >> a;
if (op == 2)
fout << aib.Search(a) << '\n';
else {
fin >> b;
if (op == 1)
fout << aib.Query(b) - aib.Query(a - 1) << '\n';
else aib.Update(a, b);
}
}
PLEC
}