Time Limits: 4000 ms Memory Limits: 524288 KB

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

Solution

  • 题目要我们动态求出序列的LIS
  • 记原序列的LIS长度为 lenlenlen
  • 不难发现答案只有三种可能:len−1,len,len+1len-1,len,len+1len−1,len,len+1
  • 对于每次修改操作 x,yx,yx,y,我们将 yyy 挂在 xxx 位置上
  • 在求 f[i]f[i]f[i] (长度为 iii 的最长严格递增子序列的末尾最小值)的时候顺便将询问拿出来
  • 求出若以它结尾从前往后最长长度 L[i]L[i]L[i] ,以及从后往前最长长度 R[i]R[i]R[i]
  • 我们考虑新序列的 LISLISLIS 的情况,它对于这个 yyy 可以选或不选
  • 对于必选情况,显然 ans=L[i]+R[i]−1ans=L[i]+R[i]-1ans=L[i]+R[i]−1
  • 对于不选情况
  • 如果它出现在原序列的最长严格递增子序列中而且最长严格递增子序列只有必选它这一个,那么ans=len−1ans=len-1ans=len−1
  • 否则有别的位置可以使最长严格递增子序列长度仍为 lenlenlen ,所以 ans=lenans=lenans=len
  • 如果它没有出现在原序列的最长严格递增子序列中,那么 ans=lenans=lenans=len
  • 最终将几种情况的答案取个 maxmaxmax 就好啦

Code

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fd(i,a,b) for(int i=a;i>=b;--i)using namespace std;const int N=5e5+5;
int n,m,t,lis;
int a[N],z[N],c[N],L[N],R[N],ans[N];
bool no[N];
struct node{int x,id;};
vector<node> V[N];
vector<int>Rank1[N],Rank2[N];int main()
{freopen("kite.in","r",stdin);freopen("kite.out","w",stdout);scanf("%d%d",&n,&m);fo(i,1,n) scanf("%d",&a[i]);fo(i,1,m){int x,y;scanf("%d%d",&x,&y);V[x].push_back((node){y,i});}t=0,memset(z,0,sizeof(z));fo(i,1,n){if(V[i].size()){fo(j,0,V[i].size()-1){int Rank=lower_bound(z+1,z+1+t,V[i][j].x)-z;Rank1[i].push_back(Rank);}}if(!t) z[++t]=a[i],L[i]=1;else{int x=lower_bound(z+1,z+1+t,a[i])-z;z[x]=a[i],t=max(t,x),L[i]=x;}}lis=t;t=0,memset(z,0,sizeof(z));fd(i,n,1){if(V[i].size()){fo(j,0,V[i].size()-1){int Rank=lower_bound(z+1,z+1+t,-V[i][j].x)-z;Rank2[i].push_back(Rank);}}if(!t) z[++t]=-a[i],R[i]=1;else{int x=lower_bound(z+1,z+1+t,-a[i])-z;z[x]=-a[i],t=max(t,x),R[i]=x;}}fo(i,1,n) if(L[i]+R[i]-1==lis) ++c[L[i]];fo(i,1,n) if(L[i]+R[i]-1==lis&&c[L[i]]>1) no[i]=1;fo(i,1,n) if(V[i].size())fo(j,0,V[i].size()-1){int p=0;if(L[i]+R[i]-1==lis&&no[i]||L[i]+R[i]-1!=lis) p=lis; else p=lis-1;p=max(p,Rank1[i][j]+Rank2[i][j]-1);ans[V[i][j].id]=p;}fo(i,1,m) printf("%d\n",ans[i]);
}

JZOJ-senior-5920. 【NOIP2018模拟10.21】风筝相关推荐

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

    5920. [NOIP2018模拟10.21]风筝 Description 当一阵风吹来,风筝飞上天空,为了你,而祈祷,而祝福,而感动-- Description oyiya 在 AK 了 IOI 之 ...

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

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

  3. [JZOJ NOIP2018模拟10.21]

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

  4. JZOJ 5939. 【NOIP2018模拟10.30】阻击计划

    Description 最近,小J发现小R和小Z之间的关系十分密切,心中十分嫉妒,为了拆散他们,小J经常扰乱他们一起玩耍的计划. 问题描述 小R和小Z打算在这个周末一起骑车在G国的城市看风景,G国的城 ...

  5. JZOJ 5922. 【NOIP2018模拟10.23】sequence

    Description 小 F 是一位 Hack 国的居民,他生活在一条长度为 n 的街道上,这个街道上总共有 n 个商店.每个商店里售卖着不同的 Hack 技能包,每个商店本身也会有个便利值.初始时 ...

  6. JZOJ 5938. 【NOIP2018模拟10.30】分离计划

    Description 众所周知,小Z拥有者足以毁灭世界的力量,可惜他不能控制这份力量,小J和小Z的关系十分亲密,一天小J预感到了小Z体内的力量将要爆发. 这次爆发的力量比以往都要强大,以至于将小Z分 ...

  7. JZOJ 5931. 【NOIP2018模拟10.27】冒泡排序

    Description 题目背景 冒泡排序的交换次数被定义为交换过程的执行次数. 题面描述 小 S 开始专注于研究⻓度为 n 的排列,他想知道,在你运气足够好的情况下(即每次冒泡排序的交换次数都是可能 ...

  8. JZOJ 5933. 【NOIP2018模拟10.27】百鸽笼

    Description Input 从文件 pigeon.in 中读入数据. 输入第一行包含两个正整数 n, m ,分别表示初始鸽笼数与操作个数. 第二行包含 n 个正整数,第 i 个数表示从左往右第 ...

  9. JZOJ 5932. 【NOIP2018模拟10.27】情报中心

    Description 题目背景 .飞纷火战来年近国 D 和国 C .飞乱子鸽来年近国 D 和国 C 题面描述 最近,C 国成功地渗透进入了 D 国的一个城市.这个城市可以抽象成一张有 n 个节点,节 ...

最新文章

  1. 大整数乘法(POJ2389)
  2. 01 | 顶层设计:微服务生态与 Spring Cloud Alibaba
  3. xposed框架在分机安装失败_免root用Xposed框架!安卓用户一定要学会
  4. 从微软一站式代码库中学到的--跨域之间的session共享
  5. 2006年星座运势全解-射手
  6. Linux 系统服务漏洞PwnKit 已存在12年,可获得所有主流发布版本的root 权限
  7. jQuery学习之DOM操作
  8. 18.链表管理内存实现c语言自动释放内存
  9. 蓝桥杯——2015年C++A组第3题:奇妙的数字【枚举】
  10. 计算机专业及相关知识测试,计算机知识及测验考试.doc
  11. 三点法求解并联机构动系相对静系的旋转矩阵
  12. nginx无网络启动失败——proxy_pass域名DNS解析出错
  13. 三分钟快速了解怎么查询ip地址,怎么更换ip地址!
  14. 如何平衡MMO游戏 ——Einsphoton
  15. java 随机生成常用汉字_Java代码实现随机生成汉字的方法
  16. 关于差分放大器双电源改单电源问题的讨论(AD628)
  17. Python培训:python中写文件的操作方法
  18. aab c式_aab表示的四字成语大全
  19. 恒讯科技分析:国内游戏服务器租用市场的大致情况怎么样呢?
  20. 编译的时候所使用的动态库中出现错误:未定义的引用

热门文章

  1. 【大学物理·早期量子论和量子力学基础】康普顿效应
  2. 基本算法——包罗万象
  3. 习题2-1 求整数均值 (10分)
  4. dedecms标签一 : 首页模板常用标签
  5. 数据库复试——数据库设计(主观题)
  6. 摩拜北京员工将搬迁至美团总部办公 CEO刘禹离职创业
  7. java 容器组件_java中的容器组件和非容器组件
  8. PostgreSQL 安装
  9. 有限合伙企业与普通合伙的区别
  10. 一个是1970年11月11日出生, 一个是1984年7月7日出生,请问两人相差几年?几个月?几日?