Pagini recente » Cod sursa (job #1409534) | Cod sursa (job #111981) | Cod sursa (job #875092) | Cod sursa (job #1891131) | Cod sursa (job #1861258)
#include <bits/stdc++.h>
using namespace std;
#define ios ios_base::sync_with_stdio(false);cin.tie(0);
#define setnow clock_t tStart=clock();
#define time (double)(clock() - tStart)/CLOCKS_PER_SEC;
//#define setin(x) ifstream cin(x);
//#define setout(x) ofstream cout(x);
typedef long long ll;
typedef long long int lli;
typedef pair < int, int> dbl;
const int maxInt = 1e9*2;
const lli maxLong = 1e18*2;
int val[100010];
int n, m;
#define cnt(x) ( (x ^ (x - 1)) & x )
int count0(int a){
int sum = 0;
for(int i = a;i > 0;i-=cnt(i))
sum+=val[i];
return(sum);
}
void update(int a, int b){
for(int i = a;i <= n;i+=cnt(i)){
val[i]+=b;
}
}
int find0(int a){
int mid, left = 1, right = n;
while(left <= right){
mid = (left + right) / 2;
int calc = count0(mid);
if(calc < a)
left = mid + 1;
if(calc > a)
right = mid - 1;
if(calc == a)
return(mid);
}
return -1;
}
int main(){
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
scanf("%d %d", &n, &m);
val[0] = 0;
for(int i = 1; i <= n; i++){
int x;
scanf("%d", &x);
update(i, x);
}
for(int i = 0; i < m; i++){
int type;
scanf("%d", &type);
if(type == 0){
int a, b;
scanf("%d %d", &a, &b);
update(a, b);
}
if(type == 1){
int a, b;
scanf("%d %d", &a, &b);
int sum = count0(b) - count0(a - 1);
printf("%d", sum);
}
if(type == 2){
int a;
scanf("%d", &a);
printf("%d", find0(a));
}
}
}