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

分析

这个其实挺简单的,我们先看一下有哪些情况,显然只有两种:

1、更改的数不在原最长不下降子序列中,直接输出原LIS(或通过该数产生的新LIS)

2、更改的数在原最长不下降子序列中,这时候要分类讨论:如果有替代的数(即在原LIS中排名相同)则是原序列长,否则原长-1

关于排名大佬们可以采用主席树

像我们这种菜鸡只能离线,排序询问以后求出包括询问及询问之前的LIS和包括询问及询问以后的LIS(正反做一遍nlogn求即可)

然后判断两LIS长之和-1是否为原LIS长,是则在LIS中,顺便用这个维护同排名出现次数

最后要吐槽出题人的是实际数据范围5e5

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=5e5+10;
struct Task {int x,y,id,rnkpre,rnknex;
}q[N];
int lispre[N],lisnex[N];
int d[N],h[N],belis[N],ans[N];
int n,m,len;bool Cmp(Task a,Task b) {return a.x<b.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",&h[i]);for (int i=1;i<=m;i++) scanf("%d%d",&q[i].x,&q[i].y),q[i].id=i;sort(q+1,q+m+1,Cmp);for (int i=1;i<=n;i++) d[i]=2147483647;int st=1;for (int i=1;i<=n;i++) {for (;st<=m&&q[st].x==i;st++) {int justanumber=lower_bound(d+1,d+n+1,q[st].y)-d;q[st].rnkpre=justanumber;}int justanumber=lower_bound(d+1,d+n+1,h[i])-d;lispre[i]=justanumber;d[justanumber]=h[i];len=max(len,justanumber);}st=m;for (int i=1;i<=n;i++) d[i]=2147483647;for (int i=n;i;i--) {        for (;st&&q[st].x==i;st--) {int justanumber=lower_bound(d+1,d+n+1,-q[st].y)-d;q[st].rnknex=justanumber;}int justanumber=lower_bound(d+1,d+n+1,-h[i])-d;lisnex[i]=justanumber;d[justanumber]=-h[i];}for (int i=1;i<=n;i++)if (lispre[i]+lisnex[i]-1==len) belis[lispre[i]]++;for (int i=1;i<=m;i++) {if (q[i].rnkpre+q[i].rnknex>len) ans[q[i].id]=q[i].rnkpre+q[i].rnknex-1;else if (lispre[q[i].x]+lisnex[q[i].x]-1==len&&belis[lispre[q[i].x]]==1) ans[q[i].id]=len-1;else ans[q[i].id]=len;}for (int i=1;i<=m;i++) printf("%d\n",ans[i]);
}

View Code

转载于:https://www.cnblogs.com/mastervan/p/9833358.html

[二分][LIS]JZOJ 5920 风筝相关推荐

  1. [dp][lis] Jzoj P5920 风筝

    Description 当一阵风吹来,风筝飞上天空,为了你,而祈祷,而祝福,而感动-- Description          oyiya 在 AK 了 IOI 之后来到了乡下,在田野中玩耍,放松身 ...

  2. 【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)

    正题 ybtoj 二分-1-2 jzoj 1253 luogu 4403 题目大意 给出n组数:si,ei,dis_i,e_i,d_isi​,ei​,di​ 对于每组数据,表示在sis_isi​加1, ...

  3. [排序][二分][dp]JZOJ 2747 捡金子

    Description 从前有一个迷宫,迷宫的外形就像一棵带根树,每个结点(除了叶子结点外)恰好有K个儿子. 一开始你在根结点,根结点的K个儿子分别标记为'A', 'B', 'C'-.,而结点'A'的 ...

  4. [二分][贪心]JZOJ P3996 Sabotage

    Description FJ 的死对头,FP,现在决定了去破坏FJ 的挤奶设备! 这个挤奶设备由一行N(3 <= N<= 100, 000)个挤奶机器,其中第i 个机器生产Mi 单位的牛奶 ...

  5. 二分二题-P1678,P3902【二分,LIS】

    T1:P1678 烦恼的高考志愿 评测记录:https://www.luogu.org/record/show?rid=9644174 大意 有m个分数线,有n个估分,给每个估分找一个最接近的分数线, ...

  6. 动态规划 —— 线性 DP

    [概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...

  7. 最长上升子序列(LIS)/最长不上升子序列问题算法详解+例题(树状数组/二分优化,看不懂你来打我)

    目录 最长上升子序列 一.朴素做法O(2n)O(2^n)O(2n) 二.优化做法O(nlogn)O(nlogn)O(nlogn) 三.例题引入:P1020 导弹拦截(求最长上升子序列和最长不上升子序列 ...

  8. 【二分】【SPFA】架设电话线(jzoj 2132)

    架设电话线 jzoj 2132 题目大意: 给你一个图,让你从1走到n,问如果可以使k条路的代价变为0(自选),那途中走的路的最大值最小是多少 样例输入 5 7 1 1 2 5 3 1 4 2 4 8 ...

  9. LIS 的 n*log 算法 ———二分维护

    upper_bound只会替换让留在数组里的最长递增子序列尽可能小 由于upper查出来的结果下标是那个可以插入这个值得最后一个元素 所以他会把大的数变成小的数 upper将可以替换成新元素的元素替换 ...

最新文章

  1. protobuf message定义_巧用 Protobuf 反射来优化代码,拒做 PB Boy
  2. C# byte[]、struct、intptr等的相互转换
  3. 获取表单提交的数据getParameter()方法
  4. 让动画每次重复前都有延迟
  5. NetCore下模拟和使用Modbus工业通信协议
  6. Map.putAll方法——追加另一个Map对象到当前Map集合
  7. android handler同步,android解决:使用多线程和Handler同步更新UI
  8. Windows Terminal Preview v0.11 发布:新的字体和主题
  9. 下划线间隔数字 排序_面试必备:经典算法动画解析之希尔排序
  10. 初步学习Django-第五篇:ORM详解
  11. 趣学 C 语言(八)—— 文件内部位置
  12. 键盘定位板图纸_罗技K750 SOLAR太阳能无线键盘评测
  13. Proteus 8.6软件安装教程
  14. the browsermob-proxy server process failed to start
  15. 清华大学《走进心理学》2021春学堂在线参考答案
  16. 修改表字段长度的操作,对业务是否有影响?
  17. project sms / BSS / OSS / ESS / dianxin / youbian / iccid / puk / pin
  18. Java中.setvalue(-1)_Java State.setValue方法代碼示例
  19. 推荐使用的热电阻Pt100测温电路
  20. Tansat XCO2数据下载

热门文章

  1. asixs 响应慢_想开始慢跑锻炼,入手一双asics跑鞋怎么选?
  2. struts2快速入门
  3. 电脑重启关机代码 BAT文件分享
  4. ES6——基本语法与详情解析
  5. 手把手教你把Vim改装成一个IDE编程环境(图文)
  6. 学习写一个Hello World驱动
  7. [ROS](11)ROS通信 —— 服务(Service)通信编程之srv(C++)(Python)
  8. 我的CSDN两周年小结
  9. 说说超链接target属性的取值和作用?
  10. es6 字符串模板拼接