Pagini recente » Cod sursa (job #378698) | Cod sursa (job #565247) | Cod sursa (job #2782789) | Cod sursa (job #28884) | Cod sursa (job #3185260)
#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ld long double
#define chad char
#define mod 1'000'000'009
#define dim 100005
#define lim 1000000
#define mdim 1501
#define mult 2e9
#define maxx 200002
#define simaimult 1e17
#define FOR(i,a,b) for(int i=(a); i<=(b); i++)
#define pli pair<ll,int>
#define pil pair<int,ll>
#define piii pair<int,pair<int,int> >
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define mp make_pair
#define nr_biti __builtin_popcount
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,q;
struct fenw
{
vector<ll> aib;
int n;
void init(int _n)
{
n=_n;
aib=vector<ll>(_n+4,0);
}
void update(int pos,ll val)
{
for(int i=pos; i<=n; i+=(i&-i))
aib[i]+=val;
}
ll query(int pos)
{
if(!pos)
return 0;
ll ans=0;
for(int i=pos; i; i-=(i&-i))
ans+=aib[i];
return ans;
}
}v;
int main()
{
ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin >> n >> q;
v.init(n);
for(int i=1; i<=n; i++)
{
int x;
fin >> x;
v.update(i,x);
}
while(q--)
{
int tip;
ll st,dr;
fin >> tip;
if(tip==0)
{
fin >> st >> dr;
v.update(st,dr);
}
else if(tip==1)
{
fin >> st >> dr;
fout << v.query(dr)-v.query(st-1) << "\n";
}
else
{
fin >> st;
int l=1,r=n;
int pp=0;
while(l<=r)
{
int mij=(l+r)/2;
if(v.query(mij)<=st)
{
pp=mij;
l=mij+1;
}
else
r=mij-1;
}
if(v.query(pp)==st)
fout << pp << "\n";
else
fout << -1 << "\n";
}
}
return 0;
}