Pagini recente » Cod sursa (job #467546) | Cod sursa (job #152496) | Cod sursa (job #353521) | Cod sursa (job #352884) | Cod sursa (job #2558849)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n, m, i, task, a, b, st, dr, mid, ok;
int v[100005], aib[100005];
void update (int poz, int val){
for (;poz<=n;poz+=(poz&(-poz))){
aib[poz] += val;
}
}
int query (int poz){
int sol = 0;
for (;poz>=1;poz-=(poz&(-poz))){
sol += aib[poz];
}
return sol;
}
int main(){
fin >> n >> m;
for (i=1; i<=n; i++){
fin >> v[i];
update (i, v[i]);
}
for (i=1; i<=m; i++){
fin >> task;
if (task == 0 || task == 1){
fin >> a >> b;
if (task == 0){
update (a, b);
}
else{
fout << query (b) - query (a - 1) << "\n";
}
}
else{
fin >> a;
st = 1, dr = n;
ok = 0;
while (st <= dr){
mid = st + (dr - st)/2;
if (query(mid) == a){
ok = 1;
fout << mid << "\n";
break;
}
else if (query(mid) > a){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if (ok == 0){
fout << -1 << "\n";
}
}
}
return 0;
}
//recapitulare