Pagini recente » Cod sursa (job #608583) | Cod sursa (job #2652067) | Cod sursa (job #3004697) | Cod sursa (job #192198) | Cod sursa (job #3270811)
#include <fstream>
#include <set>
#include <vector>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
struct AIB {
vector<int> aib;
int n;
AIB(int size) {
n = size;
aib.resize(n+1);
}
void add(int x,int i) {
while (i <= n) {
aib[i] += x;
i += i & -i;
}
}
int query(int i) {
int sum = 0;
while (i > 0) {
sum += aib[i];
i -= i & -i;
}
return sum;
}
int rangesum(int i1,int i2) {
return query(i2) - query(i1-1);
}
};
int main() {
int n,q;
cin>>n>>q;
AIB aib = AIB(n);
for (int i=1; i<=n; i++) {
int x;
cin>>x;
aib.add(x,i);
}
for (int i=0; i<q; i++) {
int c,a,b;
cin>>c;
if (c == 0) {
cin>>a>>b;
aib.add(b,a);
}
if (c == 1) {
cin>>a>>b;
cout<<aib.rangesum(a,b)<<"\n";
}
if (c == 2) {
cin>>a;
for (int i=1; i<=n; i++) {
if (aib.query(i) == a) {
cout<<i<<"\n";
break;
}
}
}
}
}