题目背景

nodgd是一个喜欢写程序的同学,前不久(好像还是有点久了)洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题。于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家……

题目描述

洛谷OJ刷题有个有趣的评测功能,就是系统自动绘制出用户的“做题曲线”。所谓做题曲线就是一条曲线,或者说是折线,是这样定义的:假设某用户在第b[i]天AC了c[i]道题,并且b[i]严格递增,那么该用户的做题曲线就是平面上点(i,c[i])依次连出的一条折线。比如你在第1天做了3道题,第3天做了4道题,第6天做了1道题,那么你在前6天的做题曲线就是从点(1,3)到点(2,4)到点(3,1)的连续折线。


nodgd同学可以预测出自己未来N天每条能够AC题目的数量,同时有一个很无趣的爱好,就是单调递增,nodgd强迫自己的做题曲线保持严格的单调递增。但是出于某些原因,nodgd在某些日子(共有K天)必须刷题,而且刷题数量一定是预计的数量(体现nodgd的神预测)。nodgd同学想知道,在这样的情况下,自己最多有多少天可以刷题,不过nodgd同学还有大量的数学竞赛题、物理竞赛题、英语竞赛题、美术竞赛题、体育竞赛题……要做,就拜托你来帮他算算了。

输入输出格式

输入格式:

第一行两个正整数,N和K,表示nodgd预测了未来N天每天做题的数量,其中K天必须刷题。

第二行K个正整数p[i],表示第p[i]天必须刷题(1<=p[i]<=N,保证每个p[i]不同)。

第三行N个正整数c[i],表示在第i天nodgd可以AC的题目数量必须是c[i]。

输出格式:

一行。

如果能找到严格递增的做题曲线:一个正整数,表示nodgd最多有多少天可以刷题。

如果找不到严格递增的做题曲线:直接输出“impossible”(不加引号,全是小写字母)。

输入输出样例

输入样例#1:

13 4
2 13 8 7
6 10 9 8 9 10 11 16 14 12 13 14 18

输出样例#1:

5

说明

数据范围

1<=N<=500000,1<=K<=N/2

1<=p[i]<=N,保证每个p[i]不同,不保证p[i]按大小顺序输入

1<=c[i]<=10^9

若果一数在序列内严格比他前面的书大,比后面的数小,那么这个数一定存在于最长上升子序列中

显然在规定必须选取的连续两天内,比前一天小的和比后一天大的一定不合法,去掉之后便可使规定选取数变为上述数

删掉不合法数然后求一遍最长上升子序列就好,注意,第七组数据规定了必须要取第0天,这是一个坑点,当然是O(nlogn)的啦(≧▽≦)/

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 500007;
int a[maxn],b[maxn],tmp[maxn],len=1,n,m;
bool tag[maxn];
bool check() {
sort(b+1,b+m+1);
for(int i=2;i<=m;++i) {
if(a[b[i]]<a[b[i-1]]) {
puts("impossible");return 1;
}
}
return 0;
}
int mid_serch(int x) {
int l=1,r=len;
while(l<=r) {
int mid=(l+r)>>1;
if(tmp[mid]<a[x])l=mid+1;
else r=mid-1;
}
return l;
}
int main () {
int t=0;
//freopen ("a.in","r",stdin);
//freopen("a.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++) {scanf("%d",b+i);if(b[i]==0)t=1;}
for(int i=1;i<=n;++i) scanf("%d",a+i);
if(check())return 0;
for(int i=2;i<=m;i++)
for(int j=b[i-1]+1;j<b[i];++j)
if(a[j]<=a[b[i-1]]||a[j]>=a[b[i]])tag[j]=1;
for(int i=1;i<b[1];++i)
if(a[i]>=a[b[1]])
tag[i]=true;
for(int i=b[m]+1;i<=n;++i)
if(a[i]<=a[b[m]])
tag[i]=true;
tmp[1]=a[1];
for(int i=2;i<=n;++i) {
if(tag[i])continue;
if(a[i]>tmp[len])tmp[++len]=a[i];
else {
int pos=mid_serch(i);
tmp[pos]=a[i];
}
}
//for(int i=1;i<=len;i++) {
// printf("%d\n",tmp[i]);
//}
printf("%d\n",len+t);
return 0;
}

luogu P1704 寻找最优美做题曲线的更多相关文章

  1. DP【洛谷P1704】 寻找最优美做题曲线

    [洛谷P1704] 寻找最优美做题曲线 题目背景 nodgd是一个喜欢写程序的同学,前不久(好像还是有点久了)洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情, ...

  2. (luogu1704)寻找最优美做题曲线 [TPLY]

    寻找最优美做题曲线 题目链接:https://www.luogu.org/problemnew/show/P1704 题目大意: 求包含指定点的最长不降子序列(严格递增) 题解 首先我们发现 一个序列 ...

  3. LIS【p1704】寻找最优美做题曲线

    Description 洛谷OJ刷题有个有趣的评测功能,就是系统自动绘制出用户的"做题曲线".所谓做题曲线就是一条曲线,或者说是折线,是这样定义的:假设某用户在第b[i]天AC了c ...

  4. [日记&做题记录]-Noip2016提高组复赛 倒数十天

    写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...

  5. AtCoder Grand Contest 11~17 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...

  6. noip做题记录+挑战一句话题解?

    因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...

  7. 小学生轻松做题App

    作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具:墨刀 原型模型链接:https://modao.cc/ ...

  8. 洛谷P3926 SAC E#1 - 一道不可做题 Jelly【模拟/细节】

    P3926 SAC E#1 - 一道不可做题 Jelly [链接]:https://www.luogu.org/problem/show?pid=3926 题目背景 SOL君(炉石主播)和SOL菌(完 ...

  9. luogu 2296 寻找道路 (搜索)

    luogu 2296 寻找道路 题目链接:https://www.luogu.org/problemnew/show/P2296 从终点bfs或者dfs,找出所有终点能到达的点. 然后再从1到n看一下 ...

随机推荐

  1. velocity生成静态页面代码

    首先需要必备的jar包: web.xml <!-- load velocity property --> <servlet> <servlet-name>veloc ...

  2. apache 报413

    http://www.hostlift.com/apache/modsecurity-request-body-content-length-is-larger-than-the-configured ...

  3. python中函数定义之实参、形参

    一般在函数的定义中,会有一类变量---形参,它是函数完成其工作的一项信息.实参往往是调用函数时传递给函数的信息.我们在调用函数时,将要让函数使用的信息放在括号内.例如定义一个函数def greet_u ...

  4. dom4j 常用操作

    package com.wanbang.wbyyb.common.util; import com.alibaba.fastjson.JSONObject; import com.wanbang.wb ...

  5. PyCharm学习笔记(一) 界面配置

     通过Ctrl+鼠标滚轮调整字体大小  设置代码区默认字体及大小 设置调试区的字体大小 设置代码风格:如Tab缩进 定义Python模板文件 # @Time : ${DATE} ${TIME} # @ ...

  6. Java技术——Java中的内存泄漏

    . OOM的常见类型 按照JVM规范,JAVA虚拟机在运行时会管理以下的内存区域: 程序计数器:当前线程执行的字节码的行号指示器,线程私有. JAVA虚拟机栈:Java方法执行的内存模型,每个Java ...

  7. css 元素垂直居中

    通用 <div id="parent"> <div id="child">Content here</div> </d ...

  8. Java-获取一个类的父类

    如何使用代码获取一个类的父类 package com.tj; public class MyClass implements Cloneable { public static void main(S ...

  9. Java总结输入流输出流

    学习Java的同学注意了!!!  学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群:618528494  我们一起学Java! 1.什么是IO Java中I/O操作主要是指使用 ...

  10. 数据库质疑或只有MDF文件资料

    --允许进行系统表的操作 use master declare @databasename varchar(255) set @databasename='Blwy BarCode' --1.如果用户 ...