Pagini recente » Cod sursa (job #264295) | Cod sursa (job #2010667) | Cod sursa (job #126427) | Cod sursa (job #671346) | Cod sursa (job #2702391)
#include <bits/stdc++.h>
#define startt ios_base::sync_with_stdio(false);cin.tie(0);
#pragma GCC target ("avx2")
#pragma GCC optimization ("O3")
#pragma GCC optimization ("unroll-loops")
typedef unsigned long long ull;
typedef long long ll;
using namespace std;
#define FOR(n) for(int i=0;i<n;i++)
#define vt vector
#define vint vector<int>
#define all(v) v.begin(), v.end()
#define sz(a) (int)a.size()
#define MOD 1000000007
#define MOD2 998244353
#define MX 1000000000
#define nax 100005
#define MXL 1000000000000000000
#define PI 3.14159265
#define pb push_back
#define pf push_front
#define sc second
#define fr first
#define int ll
#define endl '\n'
#define ld long double
vector<int> read(int n) {vector<int> a; for (int i = 0; i < n; i++) { int x; cin >> x; a.pb(x);} return a;}
struct FenwickTree {
vector<int> bit; // binary indexed tree
int n;
FenwickTree(int n) {
this->n = n;
bit.assign(n, 0);
}
FenwickTree(vector<int> a) : FenwickTree(a.size()) {
for (size_t i = 0; i < a.size(); i++)
add(i, a[i]);
}
int sum(int r) {
int ret = 0;
for (; r >= 0; r = (r & (r + 1)) - 1)
ret += bit[r];
return ret;
}
int sum(int l, int r) {
return sum(r) - sum(l - 1);
}
void add(int idx, int delta) {
for (; idx < n; idx = idx | (idx + 1))
bit[idx] += delta;
}
};
int32_t main(){
startt;
freopen("aib.in", "r", stdin);
freopen("aib.out", "w", stdout);
int n, m;
cin >> n >> m;
vint a = read(n);
FenwickTree ft(a);
for(int i = 0; i < m; i++)
{
int c;
cin >> c;
if(c == 0)
{
int a, b;
cin >> a >> b;
ft.add(a-1, b);
}
if(c == 1)
{
int l , r;
cin >> l >> r;
cout << ft.sum(l-1, r-1) << endl;
}
if(c == 2)
{
int a;
cin >> a;
int l = 0, r = n-1;
while(l < r)
{
int mid = l+(r-l)/2;
if(ft.sum(mid) == a)
{
l = mid;
break;
}
if(ft.sum(mid) > a)
{
r = mid-1;
}
else
{
l = mid+1;
}
}
int x = ft.sum(l);
if(x != a)
{
cout << -1 << endl;
}
else
{
cout << l+1 << endl;
}
}
}
}