Pagini recente » Cod sursa (job #1742870) | Cod sursa (job #2193874) | Cod sursa (job #2625855) | Cod sursa (job #871896) | Cod sursa (job #1658451)
#include <iostream>
#include <math.h>
#include <fstream>
#define zeros(x) (x & (~(x-1)))
int aib[100000];
int v[100000];
int n;
using namespace std;
void init_aib(){
for (int i = 1; i <= n; i++){
for (int j = (i - zeros(i)) + 1; j <= i; j++){
//if (j <= 0) j = 1;
aib[i] += v[j];
}
}
}
void update(int x, int val){
for (int i = x; i <= n; i+=zeros(i)){
aib[i] += val;
}
}
int querry(int x){
int sum = 0;
for (int i = x; i>0; i -= zeros(i)){
sum += aib[i];
}
return sum;
}
int return_val(int a){
for (int i = 1; i <= n; i++){
if (a == aib[i]) return i;
}
return 0;
}
using namespace std;
int main()
{
ifstream f("aib.in");
ofstream g("aib.out");
int m;
f >> n >> m;
for (int i = 1; i <= n; i++){
f >> v[i];
}
init_aib();
for (int i = 0; i<m; i++){
int a, b, c;
f >> c;
switch (c){
case 0:
f >> a >> b;
update(a, b);
break;
case 1:
f >> a >> b;
g << querry(b) - querry(a - 1) << endl;
break;
case 2:
f >> a;
g << return_val(a) << endl;
break;
}
}
return 0;
}