Pagini recente » Cod sursa (job #1386473) | Cod sursa (job #71511) | Cod sursa (job #1040110) | Monitorul de evaluare | Cod sursa (job #3349085)
#include <fstream>
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
const int mxN = 1e5 + 1;
unsigned int aib[mxN], n, m;
void update(int ind, unsigned val){
for(int i = ind; i <= n; i += i & (-i))
aib[i] += val;
}
unsigned int query(int ind){
unsigned int ans = 0;
while(ind){
ans += aib[ind];
ind -= ind & (-ind);
}
return ans;
}
int cautBin(unsigned int target){
int mid, l = 1, r = n;
unsigned int aux;
while(l <= r){
mid = (l + r) / 2;
aux = query(mid);
if(aux == target) return mid;
if(aux < target) l = mid + 1;
else r = mid - 1;
}
return -1;
}
int main(){
unsigned int aux;
fin >> n >> m;
for(int i = 1; i <= n; i++){
fin >> aux;
update(i, aux);
}
for(int i =1 ; i <= m; i++){
unsigned int c, a, b;
fin >> c >> a;
if(c == 0){
fin >> b;
update(a, b);
}else if(c == 1){
fin >> b;
fout << query(b) - query(a - 1) << "\n";
}else{
fout << cautBin(a) << "\n";
}
}
}