#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+5;
long long aint[4*N],lazy[4*N],n,q,v[N];
void propaga(int nod)
{
lazy[nod*2]+=lazy[nod];
lazy[nod*2+1]+=lazy[nod];
aint[nod*2]+=lazy[nod];
aint[nod*2+1]+=lazy[nod];
lazy[nod]=0;
}
void update(int nod,int st,int dr,int l,int r,long long val)
{
if(l>r)
return;
if(l<=st&&dr<=r)
{
aint[nod]+=val;
lazy[nod]+=val;
}
else if(l>dr||st>r)
{
return;
}
else
{
int mij=(st+dr)/2;
propaga(nod);
update(nod*2,st,mij,l,r,val);
update(nod*2+1,mij+1,dr,l,r,val);
}
}
long long query(int nod,int st,int dr,int poz)
{
if(st==dr)
{
return aint[nod];
}
else
{
propaga(nod);
int mij=(st+dr)/2;
if(poz<=mij)
return query(nod*2,st,mij,poz);
else
return query(nod*2+1,mij+1,dr,poz);
}
}
void citeste()
{
cin>>n>>q;
for(int i=1; i<=n; i++)
cin>>v[i];
sort(v+1,v+n+1);
for(int i=1; i<=n; i++)
{
update(1,1,n,i,i,v[i]);
}
}
void queries()
{
for(int i=1; i<=q; i++)
{
char d;
cin>>d;
if(d=='F')
{
long long siz,height;
cin>>siz>>height;
int st=1,dr=n;
int poz=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(1,1,n,mij)>=height)
{
poz=mij;
dr=mij-1;
}
else
st=mij+1;
}
if(poz==-1)
continue;
if(n-poz+1<=siz)
{
update(1,1,n,poz,n,1);
continue;
}
long long val=query(1,1,n,poz+siz-1);
int poz2=-1;
st=poz,dr=poz+siz-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(1,1,n,mij)<val)
{
poz2=mij;
st=mij+1;
}
else
dr=mij-1;
}
update(1,1,n,poz,poz2,1);
if(poz2>=poz)
{
siz-=(poz2-poz+1);
}
st=1,dr=n;
poz2=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(1,1,n,mij)<=val)
{
poz2=mij;
st=mij+1;
}
else
dr=mij-1;
}
update(1,1,n,poz2-siz+1,poz2,1);
}
else
{
long long val1,val2;
cin>>val1>>val2;
int st=1,dr=n;
int poz1=-1,poz2=-1;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(1,1,n,mij)>=val1)
{
dr=mij-1;
poz1=mij;
}
else
st=mij+1;
}
if(poz1==-1||query(1,1,n,poz1)>val2)
{
cout<<0<<'\n';
continue;
}
st=1,dr=n;
while(st<=dr)
{
int mij=(st+dr)/2;
if(query(1,1,n,mij)<=val2)
{
st=mij+1;
poz2=mij;
}
else
dr=mij-1;
}
cout<<poz2-poz1+1<<'\n';
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
citeste();
queries();
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |