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的主要内容,如果未能解决你的问题,请参考以下文章