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. android.util.AndroidRuntimeException: requestFeature() must be called before adding content
  2. jQuery Autocomplete
  3. 无人驾驶方面牛人和实验室
  4. Sublime Text 3下Emmet使用技巧
  5. Springboot项目与vue项目整合打包
  6. 体检结果(2018年10月,胃肠镜)
  7. 何川L3管理课_模块1_定目标
  8. 【语音处理】基于matlab音频信号FIR+IIR(高通+低通+带通)滤波器频谱分析【含Matlab源码 1732期】
  9. 用SAI的时候笔会自动取色,画个草稿都画不下去怎么办
  10. 软件质量属性:可用性
  11. MATLAB中对于矩阵的算术运算、关系运算、逻辑运算、转置、求逆、求和和求积
  12. HTML、js实现图片绕中心旋转
  13. 数仓 - 生命周期、用户价值、忠诚度、活跃度计算
  14. meo学习笔记5:C++中的类型转换概述
  15. Merge碰到ORA-30926 无法在源表中获得一组稳定的行
  16. windows下编译Sqlite-3.38.0及使用(存储json)
  17. 以AI赋能企业数智化转型 容联“云端”服贸会完美收官
  18. (转)ENVI端元提取(MNF→PPI→n-D Visualizer)
  19. 关于Unity通过webgl打包中文消失问题
  20. 微信小程序 - 分享商品海报

热门文章

  1. 网络模型的参数量和FLOPs的计算 Pytorch
  2. jquery点击禁用
  3. 实业落地的区块链车联网-纷享车链AutoChain项目非官方解读
  4. 分组循环查询实现列转行
  5. Windows CE嵌入式导航系统研究(内核相关)
  6. 电脑提示无法添加打印机怎么办
  7. php 中 t怎么打开,PHP中的流
  8. CityEngine--Color颜色表
  9. 大势与云梯:后疫情时代,属于互联网行业的新出海时代
  10. 利用ipconfig /renew重新获取IP地址,IPCONFIG/FLUSHDNS刷新缓存