Make It Increasing CF 1473 E

Posted league-of-cryer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Make It Increasing CF 1473 E相关的知识,希望对你有一定的参考价值。

魔改一下nlogn求最长不下降子序列的模板就行
对于不能修改的位置 他们肯定是存在答案里面的
那么维护答案序列最后的不可修改位置 设为las
如果新加入的数的位置小于等于las 则跳过
否则 维护las 并且把las以后的序列清空

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
int a[N],b[N],l[N],e,ban[N],las;
int main(){
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i = 1; i <= n; i++) scanf("%d",&a[i]);
	for(int i = 1; i <= k; i++) scanf("%d",&b[i]),ban[b[i]]=1;
	for(int i = 2; i <= k; i++){
		if(a[b[i]]-a[b[i-1]]<b[i]-b[i-1]){
			puts("-1");
			return 0;
		}
	}
	for(int i = 1; i <= n; i++) a[i]-=i;
	for(int i = 1; i <= n; i++){
		if(e==0||a[i]>=l[e]){
			l[++e]=a[i];
			if(ban[i]) las=e;
		}else{
			int p = upper_bound(l+1,l+e+1,a[i])-l;
			if(p<=las) continue;
			l[p]=a[i];
			if(ban[i]) las=p,e=p;
		}
	}
	printf("%d
",n-e);
	return 0;
}




以上是关于Make It Increasing CF 1473 E的主要内容,如果未能解决你的问题,请参考以下文章

[CF 1043F] Make It One

CF1342F Make It Ascending

CF1342F Make It Ascending

CF1065C Make It Equal

[CF1095F]Make It Connected

CF568E Longest Increasing Subsequence