Pagini recente » Cod sursa (job #2280017) | Cod sursa (job #481917) | Cod sursa (job #832215) | Cod sursa (job #2421041)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, i, j, x, y, p, tip, s, l, r;
pair<int,int> v[300005];
int val[300005];
void fa_perechi(int nod)
{
if(nod<p)
{
fa_perechi(2*nod);
fa_perechi(2*nod+1);
v[nod].first=v[2*nod].first;
v[nod].second=v[2*nod+1].second;
val[nod]=val[2*nod]+val[2*nod+1];
}
}
void fa_0(int nod, int poz, int x)
{
if(v[nod].first==poz&&v[nod].second==poz)
{
val[nod]+=x;
}
else if(v[nod].first<=poz&&v[nod].second>=poz)
{
fa_0(nod*2,poz,x);
fa_0(nod*2+1,poz,x);
val[nod]=val[nod*2]+val[nod*2+1];
}
}
void fa_1(int nod, int l, int r)
{
if (v[nod].first>=l&&v[nod].second<=r)s+=val[nod];
else if((v[nod].first<=l&&v[nod].second>=r)||(v[nod].first>=l&&v[nod].first<=r&&v[nod].second>r)||(v[nod].second<=r&&v[nod].second>=l&&v[nod].first<l))
{
fa_1(nod*2,l,r);
fa_1(nod*2+1,l,r);
}
}
int fa_2(int poz, int nod, int scaut, int nrl)
{
//fout<<nrl<<' '<<poz<<' '<<nod<<'\n';
if(nrl>p)
return -1;
for(poz;poz<=nrl&&s+val[nod]<=scaut;poz++,nod++)
s+=val[nod];
if(s==scaut)
return v[nod-1].second;
fa_2(poz,(nod)*2,scaut,nrl*2);
}
int main()
{
fin>>n>>m;
p=1;
while(p<n)
{
p*=2;
}
for(i=p;i<=p+n-1;i++)
fin>>val[i],v[i].second=v[i].first=i-p+1;
for(i=p+n;i<p*2;i++)
v[i].first=v[i].second=i-p+1;
fa_perechi(1);
// for(i=1;i<=p*2;i++)
// fout<<i<<' '<<val[i]<<' '<<v[i].first<<' '<<v[i].second<<'\n';
for(j=1;j<=m;j++)
{
fin>>tip;
if(tip==2)
{
s=0;
fin>>x;
fout<<fa_2(1,1,x,1)<<'\n';
// fin>>x;
// fa_2(x);
}
else if(tip==1)
{
fin>>l>>r;
s=0;
fa_1(1,l,r);
fout<<s<<'\n';
}
else
{
fin>>l>>r;
fa_0(1,l,r);
// fout<<'\n';
//for(i=1;i<=p*2;i++)
//fout<<i<<' '<<val[i]<<' '<<v[i].first<<' '<<v[i].second<<'\n';
// fout<<'\n';
}
}
return 0;
}