版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
极其心酸的一道题。。
考场上脑残了。。。
想到了一个奇怪的单调队列+主席树的做法,然后还现推了2h的主席树,然后就爆炸了。。。
思路就是倒着做,用单调队列找每一个点第一个a小于它的点,然后用主席树把这段区间中的b<a的数的个数统计出来
加到答案里面
看起来很对
但是出现了一个致命错误:每个数对应的第一个最小值点不一定要被选中
于是就WAAAAAAAAAAAAAAAAAAA了
QwQ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
而且还有两个点RE,说明主席树也有问题
心都凉了。。。。。。。。
其实RE是因为后面在写代码的时候不小心把主席树的struct删掉了,重新打的时候就忘记乘19了
彻底凉了。。。。。。。
凉凉代码:QwQ
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int gi()
{
char c;int num=0,flg=1;
while((c=getchar())<'0'||c>'9')if(c=='-')flg=-1;
while(c>='0'&&c<='9'){num=num*10+c-48;c=getchar();}
return num*flg;
}
#define N 100005
int stk[N],top;
struct tnode{
int a,b,f,i;
}t[N];
struct node{
int l,r,cnt;
}a[N*19];
int cnt,T[N];
int insert(int rt,int l,int r,int x)
{
int nrt=(++cnt);
a[nrt].l=a[rt].l;a[nrt].r=a[rt].r;
a[nrt].cnt=a[rt].cnt+1;
if(l==r) return nrt;
int mid=(l+r)>>1;
if(x<=mid) a[nrt].l=insert(a[rt].l,l,mid,x);
else a[nrt].r=insert(a[rt].r,mid+1,r,x);
return nrt;
}
int query(int lrt,int rrt,int l,int r,int ql,int qr)
{
if(l>qr||r<ql) return 0;
if(ql<=l&&r<=qr)
return a[rrt].cnt-a[lrt].cnt;
int mid=(l+r)>>1;
return query(a[lrt].l,a[rrt].l,l,mid,ql,qr)
+query(a[lrt].r,a[rrt].r,mid+1,r,ql,qr);
}
int hh[2*N],ct;
int main()
{
freopen("leader.in","r",stdin);
freopen("leader.out","w",stdout);
int n,i,nf,ans=0,MX;
n=gi();
for(i=1;i<=n;i++){
t[i].a=gi();hh[++ct]=t[i].a;
t[i].b=gi();hh[++ct]=t[i].b;
t[i].i=i;
}
sort(hh+1,hh+ct+1);
int len=unique(hh+1,hh+ct+1)-hh-1;
for(i=1;i<=n;i++){
t[i].a=lower_bound(hh+1,hh+len+1,t[i].a)-hh;
t[i].b=lower_bound(hh+1,hh+len+1,t[i].b)-hh;
}
for(i=1;i<=n;i++){
printf("%d %d\n",t[i].a,t[i].b);
}
top=0;stk[++top]=n+1;t[n+1].f=0;
MX=t[n+1].b=len+1;
T[1]=insert(T[0],1,MX,t[n+1].b);
for(i=n;i>=1;i--){
while(top>0&&t[stk[top]].a>=t[i].a)
top--;
//nf=count(b[i+1~stk[top].i]<a[i]);
nf=query(T[n-stk[top]+1],T[n-i+1],1,MX,1,t[i].a);
t[i].f=nf+t[stk[top]].f;
ans=max(ans,t[i].f);
stk[++top]=i;
T[n-i+2]=insert(T[n-i+1],1,MX,t[i].b);
}
printf("%d",ans+1);
}
想错了才是最惨的。。。。。。。。。。2个小时就没了啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
(正解占坑代填)