LIS【p1704】寻找最优美做题曲线
Description
洛谷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同学还有大量的数学竞赛题、物理竞赛题、英语竞赛题、美术竞赛题、体育竞赛题……要做,就拜托你来帮他算算了。
Input
第一行两个正整数,N和K,表示nodgd预测了未来N天每天做题的数量,其中K天必须刷题。
第二行K个正整数p[i],表示第p[i]天必须刷题(1<=p[i]<=N,保证每个p[i]不同)。
第三行N个正整数c[i],表示在第i天nodgd可以AC的题目数量必须是c[i]。
Output
一行。
如果能找到严格递增的做题曲线:一个正整数,表示nodgd最多有多少天可以刷题。
如果找不到严格递增的做题曲线:直接输出“impossible”(不加引号,全是小写字母)。
woc,渣题。
首先需要明确的是,我们需要维护最长上升子序列.就像我的刷题记录 qwq
题目要求必须选一些位置,这些位置是必须选的.
所以我们需要考虑的是这些位置,两两之间的位置的合法性.
例如这样:
蓝色部分必选.
中间部分均不合法.我们标记一下即可。
由于\(p_i\)不连续,所以我们需要\(Sort\).
但是我们还需要判断左右两端是否合法.(这个坑死了.
小声bb
我们已经筛去了不合法的位置,所以合法位置一定是严格递增的。
又因为我们必选位置一定会是其中的一员,因此这些必选位置一定会被选.
代码
#include<cstdio>
#include<algorithm>
#include<cctype>
#define R register
using namespace std;
inline void in(int &x)
{
int f=1;x=0;char s=getchar();
while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}
while(isdigit(s)){x=x*10+s-'0';s=getchar();}
x*=f;
}
int n,m,stk[5000008],top,a[5000008];
int flg[5000008];
bool vis[5000008];
int main()
{
in(n),in(m);stk[0]=-1;
for(R int i=1,x;i<=m;i++)in(flg[i]);
for(R int i=1;i<=n;i++)in(a[i]),vis[i]=true;
sort(flg+1,flg+m+1);
for(R int i=1;i<m;i++)
{
if(a[flg[i]]>=a[flg[i+1]])
{
puts("impossible");
return 0;
}
for(R int j=flg[i]+1;j<flg[i+1];j++)
if(a[j]<=a[flg[i]] or a[j]>=a[flg[i+1]])
vis[j]=false;
}
for(R int i=1;i<flg[1];i++)
if(a[i]>=a[flg[1]])vis[i]=false;
for(R int i=flg[m]+1;i<=n;i++)
if(a[i]<=a[flg[m]])vis[i]=false;
for(R int i=1;i<=n;i++)
{
if(!vis[i])continue;
if(a[i]>stk[top])
stk[++top]=a[i];
else
{
int l=1,r=top;
while(l<=r)
{
int mid=(l+r)>>1;
if(stk[mid]>a[i])r=mid-1;
else l=mid+1;
}
stk[l]=a[i];
}
}
printf("%d",top);
}
LIS【p1704】寻找最优美做题曲线的更多相关文章
- luogu P1704 寻找最优美做题曲线
题目背景 nodgd是一个喜欢写程序的同学,前不久(好像还是有点久了)洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- 题 ...
- DP【洛谷P1704】 寻找最优美做题曲线
[洛谷P1704] 寻找最优美做题曲线 题目背景 nodgd是一个喜欢写程序的同学,前不久(好像还是有点久了)洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情, ...
- (luogu1704)寻找最优美做题曲线 [TPLY]
寻找最优美做题曲线 题目链接:https://www.luogu.org/problemnew/show/P1704 题目大意: 求包含指定点的最长不降子序列(严格递增) 题解 首先我们发现 一个序列 ...
- [日记&做题记录]-Noip2016提高组复赛 倒数十天
写这篇博客的时候有点激动 为了让自己不颓 还是写写日记 存存模板 Nov.8 2016 今天早上买了两个蛋挞 吃了一个 然后就做数论(前天晚上还是想放弃数论 但是昨天被数论虐了 woc noip模拟赛 ...
- LIS LCS LCIS (主要过一遍,重在做题)
只详细讲解LCS和LCIS,别的不讲-做题优先. 菜鸟能力有限写不了题解,可以留评论,我给你找博客. 先得理解最长上升子序列吧,那个HDOJ拦截导弹系列可以做一下,然后用o(n)log(n)的在做一遍 ...
- AtCoder Grand Contest 11~17 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...
- noip做题记录+挑战一句话题解?
因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...
- 小学生轻松做题App
作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具:墨刀 原型模型链接:https://modao.cc/ ...
- NOIP2016考前做题(口胡)记录
NOIP以前可能会持续更新 写在前面 NOIP好像马上就要到了,感觉在校内训练里面经常被虐有一种要滚粗的感觉(雾.不管是普及组还是提高组,我都参加了好几年了,结果一个省一都没有,今年如果还没有的话感觉 ...
随机推荐
- 【Random Forest】林轩田机器学习技法
总体来说,林对于random forest的讲解主要是算法概况上的:某种程度上说,更注重insights. 林分别列举了Bagging和Decision Tree的各自特点: Random Fores ...
- CocosCreator设置模拟器默认横竖屏以及机型
之前好好的横屏,今天不知道为毛突然变成竖屏了,虽然可以在点击模拟器左上角进行设置, 但是 每次启动模拟器又变成竖屏了,折腾了很久,终于找到了设置的地方,记录下:
- soapUI的简单使用(webservice接口功能测试)
1.soapUI支持什么样的测试? 功能测试.性能测试.负载.回归测试等,它不仅仅可以测试基于 SOAP 的 Web 服务,也可以测试 REST 风格的 Web 服务. 1.SoapUI安装注意事项 ...
- 关于mysqldump备份非事务表的注意事项
Preface We're used to get a logical backup set(whole instance) by simply specifying "-- ...
- Pythonyield使用浅析
转自:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ 您可能听说过,带有 yield 的函数在 Python ...
- Appium与python自动测试环境及demo详解
App--UI自动化这种高端的名词已经被越来越多的人所高呼,可是从实际角度来讲,个人觉得还是有点鸡肋,不如接口自动化敏捷度高,工作量 也是接口自动化的好几倍.但是,[划重点了] 在技术时代中,作为测 ...
- eclipse把jar包引入项目的两种方法
方法一: build path引入jar包 方法二: 把jar包放入lib文件夹 区别: 把jar包放入lib文件夹,以后把程序发给别人,别人可以直接运行而无需再自己添加jar包 总结: 1.有时即使 ...
- RAID介绍和实现
RAID的全称是廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),于1987年由美国Berkeley 大学的两名工程师提出的. RAID出现的,最初目的是将 ...
- Struts2+DAO层实现实例02——搭建DAO基本框架并与Struts2组合
实例内容 创建DAO(Data Access Oject)接口:BaseDAO 创建其实例化类:UserDAO 用于获取数据库struts中的userinfo表中的内容 创建User的Java Bea ...
- objective-c runtime 开发详情
目录 概述 对象与类的实质 id与class 继承关系与isa 总结 C函数创建一个OC类 OC类与runtime NSObjectProtocol NSObject NSProxy 一.概述 Obj ...