本地 AC,提交 WA
查看原帖
本地 AC,提交 WA
606830
YaoMengJiang楼主2021/11/5 12:38

RT,有理由怀疑是 SPJ 的问题?

#include<cstdio>
#include<vector>
#include<algorithm>
std::vector<int> vec[500005];
int nxt[500005],pre[500005],a[500005],b[500005],c[500005],f[500005],g[500005];
inline int read() {
	register int x=0,f=1;register char s=getchar();
	while(s<'0'||s>'9') {if(s=='-') f=-1;s=getchar();}
	while(s>='0'&&s<='9') {x=x*10+s-'0';s=getchar();}
	return x*f;
} 
inline int max(const int &x,const int &y) {return x>y? x:y;}
int main() {
	freopen("lista.in.5","r",stdin);
	freopen("lista.ans","w",stdout); 
	int n=read(),T=read();
	nxt[0]=1;
	for(register int i=1;i<=n+1;++i) {
		nxt[i]=i+1; pre[i]=i-1;
	}
	while(T--) {
		char op;
		scanf("%c ",&op); 
		int x=read(),y=read();
		pre[nxt[x]]=pre[x];
		nxt[pre[x]]=nxt[x];
		if(op=='A') {
			nxt[pre[y]]=x;
			pre[x]=pre[y];
			nxt[x]=y;
			pre[y]=x;	
		}
		else {
			pre[nxt[y]]=x;
			nxt[x]=nxt[y];
			pre[x]=y;
			nxt[y]=x;
		}
	}
	int tot=0;
	for(register int i=1,cur=nxt[0];i<=n;++i,cur=nxt[cur]) a[i]=cur;//printf("%d ",cur); printf("\n");
	for(register int i=1;i<=n;++i) f[i]=1e9+6;
	for(register int i=1;i<=n;++i) {
		int p=std::upper_bound(f+1,f+1+n,a[i])-f;
		f[p]=a[i]; g[a[i]]=f[p-1]; //vec[p].push_back(i);
		tot=max(tot,p);
	}
	int cur=n,qwq=0,tt=f[tot]; 
	for(register int x=f[tot];x;x=g[x]) {
		c[++qwq]=x;
	}
//	for(register int i=1;i<=n;++i) nxt[i]=0;
//	for(register int i=tot;i>=1;--i) {
//		std::sort(vec[i].begin(),vec[i].end());
//		int p=0; //printf("%d %d\n",p,vec[i].size());
//		for(register int j=0;j<vec[i].size();++j) {
//			if(vec[i][j]<=cur) {
//				p=max(p,vec[i][j]);
//			}
//		}	
//		if(i==tot) tt=a[p];
//		c[++qwq]=a[p]; b[a[p]]=1; //printf("%d\n",a[p]);
//		cur=p;
//	}
	std::reverse(c+1,c+1+qwq);	printf("%d\n",n-tot);
	cur=1;
	for(register int i=1;i<=n;++i) {
		if(i==c[cur]) {++cur; continue;}
		if(c[cur]>i) {
			printf("A %d %d\n",i,c[cur]);	
		}
		else {
			printf("B %d %d\n",i,tt);
			tt=i;
		}
	}
	return 0;
}

2021/11/5 12:38
加载中...