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<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=5e5+77;
int h[maxn],ans[maxn],lis1[maxn],lis2[maxn],n,m,f[maxn],len,k[maxn];
struct A
{int x,v,id,a,b;
}a[maxn];
bool cmp(A x,A y)
{return x.x<y.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",&a[i].x,&a[i].v),a[i].id=i;sort(a+1,a+m+1,cmp);int l=1;memset(f,0x3f,sizeof(f));for(int i=1; i<=n; i++){while(l<=m&&i==a[l].x){int p=lower_bound(f+1,f+n+1,a[l].v)-f;a[l].a=p,l++;}int p=lower_bound(f+1,f+n+1,h[i])-f;lis1[i]=p,f[p]=h[i],len=max(p,len);}l=m;memset(f,0x3f,sizeof(f));for(int i=n; i>=1; i--) {while(l>0&&a[l].x==i){int p=lower_bound(f+1,f+n+1,-a[l].v)-f;a[l].b=p,l--;}int p=lower_bound(f+1,f+n+1,-h[i])-f;lis2[i]=p,f[p]=-h[i];}for(int i=1; i<=n; i++) if(lis1[i]+lis2[i]>len) k[lis1[i]]++;for(int i=1; i<=m; i++){if(a[i].a+a[i].b>len) ans[a[i].id]=a[i].a+a[i].b-1;else if(lis1[a[i].x]+lis2[a[i].x]>len&&k[lis1[a[i].x]]==1) ans[a[i].id]=len-1;else ans[a[i].id]=len;}for (int i=1;i<=m;i++) printf("%d\n",ans[i]);
}

【JZOJ A组】风筝相关推荐

  1. jzoj C组 2017.1.19 比赛

    第一题--小x的游戏 题目描述 Tac游戏在一个4*4的方格上进行.起先可能会在16个方格中出现一个标记'T',其余的方格是空着的.游戏有两个玩家,小x和小o.小x先开始,然后游戏轮流进行.每一步玩家 ...

  2. 【JZOJ A组】海明距离

    Description 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = ...

  3. 【JZOJ A组】昆特牌

    Description 作为一个资深OIer,你被邀请到位于波兰的CDPR总部参观.但没想到你刚一到就遇到了麻烦.昆特牌的数据库发生了故障.原本昆特牌中有 k种卡牌和n 种阵营,为了平衡,每个阵营拥有 ...

  4. 【JZOJ A组】黑暗之魂(darksoul)

    Description oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰在一张地图中探险.地图中有n个篝火(也就是存档点).在篝火处休息可以将生命值恢复满 ...

  5. 【JZOJ B组】【JSOI2013】吃货JYY

    Description 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一 ...

  6. 【JZOJ A组】排列

    Description 一个关于n个元素的排列是指一个从{1, 2, -, n}到{1, 2, -, n}的一一映射的函数.这个排列p的秩是指最小的k,使得对于所有的i = 1, 2, -, n,都有 ...

  7. 【JZOJ A组省选】词典

    Description Input 第一行两个数n,m,表示有n个字符串,m个询问. 接下来n行,每行一个字符串Ti . 再接下来m行,每行一个字符串Si . Output 对于每个询问,输出一个an ...

  8. JZOJ B组【GDKOI2014】壕壕的寒假作业

    题目: Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及最晚完成的时刻,两个整数之间以一个空格间隔. Sample Input 4 4 3 4 5 6 1 ...

  9. 【JZOJ B组】【NOIP2013模拟】小喵喵的新家

    Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...

最新文章

  1. ASP.NET Web开发技术的深入总结
  2. 中文论文万能句型_SCI 论文写作万能句型汇总(很实用)
  3. oracle数据库解决system表空间已爆满的问题
  4. 第三十章 elk(1) - 第一种架构(最简架构)
  5. Codeforces 757C - Felicity is Coming!
  6. 依赖包的添加和自动检测机制
  7. 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
  8. linux系统常见操作,Linux系统基本操作
  9. python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
  10. 什么事,是你当了领导才明白的?(转)
  11. npm 查看登陆账号_自定义npm 及问题整理
  12. ROS kinetic自定义路径规划算法
  13. java jvm dump文件_各种获取JVM DUMP的方法
  14. 生成开端原著小说词云
  15. JVM进阶(六)——鲜为人知的二次标记
  16. java计算机毕业设计科普网站源码+mysql数据库+系统+lw文档+部署
  17. 数据结构实验课_实验四 队列
  18. 第九天 03-破解linux密码
  19. 解读这40项IT技能都能帮你年薪超过12万美元
  20. 一键抠图怎么弄?图片怎样变透明色背景?

热门文章

  1. IDEA配置 Git 出现卡在 Identifying Git Version?
  2. 《陈年武夷岩茶》标准获批公布,东方六禾积极促进业内有标可依
  3. 友情提示:破坏计算机信息系统罪
  4. 前端转安卓开发!作为一名程序员我不忘初心,进阶学习资料!
  5. 汇编语言 --- 32位x86处理器架构
  6. python定时执行函数
  7. Facebook Paper使用的第三方库
  8. 联想ERP项目实施案例分析(10):回到最初再反思IT价值
  9. 摩拜北京员工将搬迁至美团总部办公 CEO刘禹离职创业
  10. oracle 统计一年中每个月数据总和_Oracle 统计某一年中的1-12个月的数据总和