Pagini recente » Cod sursa (job #1778960) | Cod sursa (job #1028656) | Cod sursa (job #1861253)
#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(){
// setin("aib.in");
// setin("aib.out");
ifstream cin("aib.in");
ofstream cout("aib.out");
cin >> n >> m;
val[0] = 0;
for(int i = 1; i <= n; i++){
int x;
cin >> x;
update(i, x);
}
for(int i = 0; i < m; i++){
int type;
cin >> type;
if(type == 0){
int a, b;
cin >> a >> b;
update(a, b);
}
if(type == 1){
int a, b;
cin >> a >> b;
int sum = count0(b) - count0(a - 1);
cout << sum << endl;
}
if(type == 2){
int a;
cin >> a;
cout << find0(a) << endl;
}
}
cin.get();
}