Pagini recente » Cod sursa (job #202164) | Cod sursa (job #1074277) | Diferente pentru problema/dsets intre reviziile 4 si 5 | Cod sursa (job #1131535) | Cod sursa (job #1020635)
#include <iostream>
#include <fstream>
using namespace std;
#define zeros(x) ( (x ^ (x - 1)) & x )
int n, m;
int AIB[1000], V[1000];
void Add(int x, int quantity)
{
int i;
for (i = x; i <= n; i += zeros(i))
AIB[i] += quantity;
}
int Compute(int x)
{
int i, ret = 0;
for (i = x; i > 0; i -= zeros(i))
ret += AIB[i];
return ret;
}
int sum(int a, int b){
int S = 0;
for(int i=a; i<=b; i++){
S +=V[i];
}
return S;
}
int main()
{
ifstream fin("aib.in");
ofstream fout("aib.out");
fin >> n >> m;
for(int i=1; i<=n; i++){
fin >> V[i];
}
for(int i=1; i<=n; i++){
AIB[i] = sum(i-zeros(i)+1,i);
}
int a, b;
for(int i=1; i<=m; i++){
int cmd;
fin >> cmd;
if(cmd == 0){
fin>> a >> b;
Add(a,b);
}else if(cmd == 1){
fin>> a >> b;
fout << Compute(b)-Compute(a-1) << '\n';
}else{
fin >> a;
for(int j=1; j<=n; j++)
if(Compute(j) == a){
fout << j << '\n'; break;
}
}
}
return 0;
}