Pagini recente » Cod sursa (job #2573503) | Cod sursa (job #482272) | Cod sursa (job #171359) | Cod sursa (job #2229739) | Cod sursa (job #2568559)
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[201005];
int n,m;
void add(int poz,int val){
int i;
for(i = poz; i <= n; i += (i&-i)){
aib[i] += val;
}
}
int sum(int poz){
int i,sum = 0;
for(i = poz; i >= 1; i -= (i&-i)){
sum += aib[i];
}
return sum;
}
int query(int a,int b){
return sum(b) - sum(a-1);
}
int sumsrc(int val){
int st = 1,dr = n,mid,summid,sol = 100000000;
while(st <= dr){
mid = (st+dr)/2;
summid = sum(mid);
if(val < summid){
dr = mid-1;
}else if(val == summid){
sol = min(sol,mid);
dr = mid-1;
}else if(summid < val){
st = mid+1;
}
}
if(sol == 100000000){
return -1;
}
return sol;
}
int main()
{
int i,c,a,b,aux;
fin>>n>>m;
for(i = 1; i <= n; i++){
fin>>aux;
add(i,aux);
}
for(i = 1; i <= m; i++){
fin>>c;
if(c == 0){
fin>>a>>b;
add(a,b);
}else if(c == 1){
fin>>a>>b;
fout<<query(a,b)<<'\n';
}else if(c == 2){
fin>>a;
fout<<sumsrc(a)<<'\n';
}
}
return 0;
}