Pagini recente » Cod sursa (job #1668313) | Cod sursa (job #115532) | Cod sursa (job #2433313) | Cod sursa (job #1631664) | Cod sursa (job #2147785)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n;
const int nmax = 1e5;
int aib[nmax+10];
int sum(int index){
int suma = 0;
while(index){
suma += aib[index];
index -= (index & (-index));
}
return suma;
}
void update(int index, int val){
while(index <= n){
aib[index] += val;
index += (index & (-index));
}
}
int getNumber(int value){
int i,step;
for(step = 1; step < n; step <<= 1);
for(i = 0; step; step >>= 1){
if(i+step <= n){
if(value >= aib[i+step]){
i += step;
value -= aib[i];
if(value == 0) return i;
}
}
}
return -1;
}
int main(){
int i,nr,m,p,x,y;
fin>>n>>m;
for(i = 1; i <= n; i++){
fin>>nr;
update(i,nr);
}
for(i = 1; i <= m; i++){
fin>>p;
if(p == 0){
fin>>x>>y;
update(x,y);
}
else if(p == 1){
fin>>x>>y;
fout<<sum(y) - sum(x-1)<<"\n";
}
else{
fin>>nr;
fout<<getNumber(nr)<<"\n";
}
}
}