Pagini recente » Cod sursa (job #1435791) | Cod sursa (job #233866) | Cod sursa (job #1135582) | Cod sursa (job #2084165) | Cod sursa (job #1146974)
#include<fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int i, a, b, c, n, m, arb[100001];
int cauta(int nr){
int i, step;
for (step = 1; step < n; step <<= 1);
for (i = 0; step; step >>= 1) {
if (i + step <= n) {
if(nr >= arb[i + step]) {
i += step, nr -= arb[i];
if (!nr) return i;
}
}
}
return -1;
}
void update(int poz, int nr){
while (poz <= n){
arb[poz] += nr;
poz += (poz & -poz);
}
}
int suma(int poz){
int sol = 0;
while (poz > 0){
sol += arb[poz];
poz -= (poz & -poz);
}
return sol;
}
int main(){
fin >> n >> m;
for (i = 1; i <= n; i++){
fin >> a;
update(i, a);
}
for (i = 1; i <= m; i++){
fin >> c;
if (c == 0){
fin >> a >> b;
update(a, b);
}
if (c == 1){
fin >> a >> b;
fout << suma(b) - suma(a - 1) << '\n';
}
if (c == 2){
fin >> a;
fout << cauta(a) << '\n';
}
}
}