社区讨论
求助42
P1704寻找最优美做题曲线参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lob7wc7g
- 此快照首次捕获于
- 2023/10/29 16:36 2 年前
- 此快照最后确认于
- 2023/11/02 10:51 2 年前
Wa on 3,4,6,7
CPP#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=114514*10;
int n,k,arr[N],p[N],cnt,f[N],x;
bool flag[N];
int main(){
scanf("%d%d",&n,&k);
for(int i=0;i<k;++i){
scanf("%d",&p[i]);
--p[i];//下标从0开始
}
sort(p,p+k);
for(int i=0;i<n;++i){
scanf("%d",&arr[i]);
}
for(int i=1;i<k;++i){
if(arr[p[i]]<=arr[p[i-1]]){//p数组不是单调上升的
printf("impossible");
return 0;
}
}
p[k]=n;//最后一个必选
arr[n]=1e9;
for(int i=0;i<n;++i){
if(p[cnt]==i){
++cnt;
continue;
}
if(arr[i]<=arr[p[cnt]]||arr[i]>=arr[p[cnt+1]])flag[i]=true;//不遵循p数组的结果要删去
}
cnt=0;
for(int i=0;i<=n;++i){
if(flag[i])continue;
if(arr[i]>f[cnt]){
f[++cnt]=arr[i];
}else{
x=lower_bound(f,f+cnt+1,arr[i])-f;
f[x]=arr[i];
}
}
printf("%d",cnt);
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...