Pagini recente » Cod sursa (job #1764330) | Cod sursa (job #2569875) | Cod sursa (job #2028474) | Cod sursa (job #1954460) | Cod sursa (job #2350562)
#include <fstream>
#define endZero(x) ((x ^ (x - 1)) & x)
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int AIB[100005], n, m;
void Add(int poz, int val){
for(int i = poz; i <= n; i += endZero(i))
AIB[i] += val;
}
int Compute(int poz){
int rez = 0;
for(int i = poz; i > 0; i -= endZero(i))
rez += AIB[i];
return rez;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; ++i){
int x;
fin >> x;
Add(i, x);
}
for(int i = 1; i <= m; ++i){
int c;
fin >> c;
if(c == 0){
int a, b;
fin >> a >> b;
Add(a, b);
}
else if(c == 1){
int a, b;
fin >> a >> b;
fout << (Compute(b) - Compute(a - 1)) << '\n';
}
else {
int a;
fin >> a;
int st = 1;
int dr = n;
int poz = -1;
while(st <= dr){
int mij = (st + dr) / 2;
int val = Compute(mij);
if(val == a){
poz = mij;
dr = mij - 1;
}
else if(val > a){
dr = mij - 1;
}
else st = mij + 1;
}
fout << poz << '\n';
}
}
return 0;
}