Pagini recente » Cod sursa (job #403219) | Cod sursa (job #2193348) | Cod sursa (job #1386520) | Cod sursa (job #2199956) | Cod sursa (job #2209469)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
#define INF 1000000005
#define LINF 1000000000000000005
#define MAXN 50005
#define mp make_pair
#define pi pair<int,int>
#define pl pair<ll,ll>
#define vi vector <pi>
#define int long long
int n,m;
int a[100005],tree[100005],sum[100005];
int suma(int k){
int s = 0;
while (k >= 1){
s += tree[k];
k -= k&-k;
}
return s;
}
void add(int k, int x){
while (k <= n){
tree[k] += x;
k += k&-k;
}
}
int cautare(int s){
int ans = 0, pow = 1;
while (pow < n) pow *= 2;
for (pow; pow; pow /= 2){
if (pow + ans <= n){
if (s >= tree[pow + ans]){
ans += pow;
s -= tree[ans];
if (!s) return ans;
}
}
}
return -1;
}
signed main(){
ifstream fin("aib.in");
ofstream fout("aib.out");
fin >> n >> m;
for (int i = 1;i <= n;i++){
fin >> a[i];
sum[i]=sum[i-1] + a[i];
tree[i] = sum[i] - sum[i-(i&-i)];
}
for (int i = 1;i <= m;i++){
int q;
fin >> q;
if (q != 2){
int x,y;
fin >> x >> y;
if (!q){
add(x,y);
}
else {
fout << suma(y) - suma(x-1);
fout << "\n";
}
}
else {
int x;
fin >> x;
fout << cautare(x);
fout << "\n";
}
}
}