5920. 【NOIP2018模拟10.21】风筝

Description

       当一阵风吹来,风筝飞上天空,为了你,而祈祷,而祝福,而感动……

Description
oyiya 在 AK 了 IOI 之后来到了乡下,在田野中玩耍,放松身心。
他发现前面有一排小朋友在放风筝,每一个风筝有一个高度 hi,风筝的高度可能会随着小朋友的心情而改变。这时,毒瘤的 oyiya 有了一个毒瘤的 idea,他想知道改变高度之后风筝的最长严格上升子序列。oyiya 太强了表示并不想做这种水题,你能解决这个问题吗?

Input
第一行为两个整数 n, m,表示小朋友的个数和询问数。
第二行有 n 个整数,表示 hi。
接下来 m 行,每行两个整数 ai, bi,表示询问将第 ai 只风筝的高度变成 bi 后的 LIS。注意询问之间是独立的,后面的询问不受前面询问的影响.

Output
m 行,每行一个整数表示询问的答案。

Sample Input
3 3
2 2 3
1 3
1 1
3 2

Sample Output
2
3
1

Data Constraint

分析:改变了一个值后,序列的 LIS 有两种情况:
• 序列的 LIS 不包含这个位置,那么答案就是原序列的 LIS 或者原序列的 LIS-1(取决于该
位置是否为 LIS 方案中一定包含的点)。
• 序列的 LIS 包含这个位置,分别从前往后、从后往前建两棵主席树即可。
如何判断原序列的 LIS 是否一定包含这个点?首先得到它在 LIS 中排第几个,然后统计
有多少个排名与其相同,如果没有,那么一定包含。

代码

#include <cstdio>
#include <algorithm>
#define inf 1e9
#define N 500005
using namespace std;struct arr
{int Llis,Rlis,x,y,num;
}a[N];
int fl[N],fr[N],b[N];
int n,m,lis,f[N],v[N];
int ans[N];int cmp(arr p, arr q){return p.x < q.x;}int main()
{freopen("kite.in","r",stdin);freopen("kite.out","w",stdout);scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++) scanf("%d", &b[i]);for (int i = 1; i <= m; i++)scanf("%d%d", &a[i].x, &a[i].y), a[i].num = i;sort(a + 1, a + m + 1, cmp);for (int i = 1; i <= n; i++) f[i] = inf;int cnt = 1;for (int i = 1; i <= n; i++){while (a[cnt].x == i && cnt <= m)a[cnt].Llis = lower_bound(f + 1, f + n + 1, a[cnt].y) - f, cnt++;int lmax = lower_bound(f + 1, f + n + 1, b[i]) - f;fl[i] = lmax;lis = max(lis, lmax);f[lmax] = b[i];}cnt = m;for (int i = 1; i <= n; i++) f[i] = inf;for (int i = n; i >= 1; i--){while (a[cnt].x == i && cnt > 0)a[cnt].Rlis = lower_bound(f + 1, f + n + 1, -a[cnt].y) - f, cnt--;int lmax = lower_bound(f + 1, f + n + 1, -b[i]) - f;fr[i] = lmax;f[lmax] = -b[i];}for (int i = 1; i <= n; i++)if (fl[i] + fr[i] > lis) v[fl[i]]++;for (int i = 1; i <= m; i++) if (a[i].Llis + a[i].Rlis > lis) ans[a[i].num] = a[i].Llis + a[i].Rlis - 1;else if (fl[a[i].x] + fr[a[i].x] > lis && v[fl[a[i].x]] == 1) ans[a[i].num] = lis - 1;else ans[a[i].num] = lis;for (int i = 1; i <= m; i++)printf("%d\n", ans[i]);
}

jzoj5920. 【NOIP2018模拟10.21】风筝(dp,最长上升子序列)相关推荐

  1. JZOJ-senior-5920. 【NOIP2018模拟10.21】风筝

    Time Limits: 4000 ms Memory Limits: 524288 KB Description 当一阵风吹来,风筝飞上天空,为了你,而祈祷,而祝福,而感动-- oyiya 在 AK ...

  2. [JZOJ NOIP2018模拟10.21]

    考试之前我刚刚领略到了特判的重要性,没想到T2的两个子任务还是写挂了,丢了20分 考试的感觉不行,一路打的都是暴力,正解的思路想到一半就断了推不下去 T1:逛公园 题目链接: https://jzoj ...

  3. jzoj 5906. 【NOIP2018模拟10.15】传送门(树形dp)

    5906. [NOIP2018模拟10.15]传送门 Description 8102年,Normalgod在GLaDOS的帮助下,研制出了传送枪.但GLaDOS想把传送枪据为己有,于是把Normal ...

  4. jzoj5904. 【NOIP2018模拟10.15】刺客信条(并查集)

    5904. [NOIP2018模拟10.15]刺客信条 Description 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受到圣殿骑士的杀害,决心成为一 ...

  5. JZOJ5920. 【NOIP2018模拟10.22】风筝

    题意: 当一阵风吹来,风筝飞上天空,为了你,而祈祷,而祝福,而感动-- oyiya 在 AK 了 IOI 之后来到了乡下,在田野中玩耍,放松身心. 他发现前面有一排小朋友在放风筝,每一个风筝有一个高度 ...

  6. HDU1159(dp最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Problem Description A subsequ ...

  7. 【HDU - 1025】Constructing Roads In JGShining's Kingdom(dp最长上升子序列模型 + 二分优化)

    题干: Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit ...

  8. UVa 10066 Twin Towers (DP 最长公共子序列)

    题意  求两串数字最长公共子序列的长度 裸的lcs没啥说的 #include<cstdio> #include<cstring> #include<algorithm&g ...

  9. [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)

    题目链接: http://172.16.0.132/senior/#contest/show/2530/1 题目: EZ同学家里非常富有,但又极其的谦虚,说话又好听,是个不可多得的人才.       ...

最新文章

  1. 8比特数值也能训练模型?商汤提训练加速新算法丨CVPR 2020
  2. IROS2021|DLL直接点云定位:一种基于点云地图的航空机器人定位方法
  3. 复杂性理论研究的核心问题是什么
  4. Mybatis查询可能为null
  5. Linux设备驱动之mmap设备操作
  6. java在退出前释放资源_Java中如何通过try优雅地释放资源?
  7. MySQL日期时间函数大全(转)
  8. 计算机自动关闭硬盘,你遇到过电脑硬盘自动关闭的问题吗?
  9. Fixjs——显示容器基类DisplayObjectContainer
  10. java多线程-基础知识
  11. plc单片机组态软件php_学习plc单片机组态软件,嵌入式的一些心得
  12. 寻星时卫星数字电视接收机的信号检测功能
  13. 计算机电源管理设置,如何修改计算机中设置的显卡电源管理模式
  14. 5v继电器模块实物接线_5v继电器的工作原理
  15. 工作流——流程设计器
  16. 用Burg法估计AR模型的参数原理详解及matlab实现
  17. 为什么录像都是用.avi而不是.mp4?
  18. 2022最新独立版智狐聚合支付v1.0.5.21_聚合支付系统源码
  19. 安装 ubuntu16.04 ROS2 超过5分钟你打我 后带 测试talker listener demo
  20. 风控模型中的KS指标

热门文章

  1. Hive优化【提高效率,减少资源浪费等】
  2. centos定时运行python_CentOS中实现定时执行python脚本的方法
  3. python中的count函数
  4. python3爬虫——多线程爬取斗图网表情包
  5. 互联网产品定位深层次分析
  6. a标签target属性
  7. Android自定义ProgressBar样式
  8. Windows下YOLOX的配置
  9. Linux下安装PostgreSQL
  10. 每日IN语(2009-02-03)本人的收入象出纳的帐