【JZOJ A组】风筝
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组】风筝相关推荐
- jzoj C组 2017.1.19 比赛
第一题--小x的游戏 题目描述 Tac游戏在一个4*4的方格上进行.起先可能会在16个方格中出现一个标记'T',其余的方格是空着的.游戏有两个玩家,小x和小o.小x先开始,然后游戏轮流进行.每一步玩家 ...
- 【JZOJ A组】海明距离
Description 对于二进制串a,b,他们之间的海明距离是指两个串异或之后串中1的个数.异或的规则为: 0 XOR 0 = 0 1 XOR 0 = 1 0 XOR 1 = 1 1 XOR 1 = ...
- 【JZOJ A组】昆特牌
Description 作为一个资深OIer,你被邀请到位于波兰的CDPR总部参观.但没想到你刚一到就遇到了麻烦.昆特牌的数据库发生了故障.原本昆特牌中有 k种卡牌和n 种阵营,为了平衡,每个阵营拥有 ...
- 【JZOJ A组】黑暗之魂(darksoul)
Description oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰在一张地图中探险.地图中有n个篝火(也就是存档点).在篝火处休息可以将生命值恢复满 ...
- 【JZOJ B组】【JSOI2013】吃货JYY
Description 世界上一共有N个JYY愿意去的城市,分别从1编号到N.JYY选出了K个他一定要乘坐的航班.除此之外,还有M个JYY没有特别的偏好,可以乘坐也可以不乘坐的航班. 一个航班我们用一 ...
- 【JZOJ A组】排列
Description 一个关于n个元素的排列是指一个从{1, 2, -, n}到{1, 2, -, n}的一一映射的函数.这个排列p的秩是指最小的k,使得对于所有的i = 1, 2, -, n,都有 ...
- 【JZOJ A组省选】词典
Description Input 第一行两个数n,m,表示有n个字符串,m个询问. 接下来n行,每行一个字符串Ti . 再接下来m行,每行一个字符串Si . Output 对于每个询问,输出一个an ...
- JZOJ B组【GDKOI2014】壕壕的寒假作业
题目: Input Output 输出n行.第i行输出两个整数,分别表示第i份作业最早完成的时刻以及最晚完成的时刻,两个整数之间以一个空格间隔. Sample Input 4 4 3 4 5 6 1 ...
- 【JZOJ B组】【NOIP2013模拟】小喵喵的新家
Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...
最新文章
- ASP.NET Web开发技术的深入总结
- 中文论文万能句型_SCI 论文写作万能句型汇总(很实用)
- oracle数据库解决system表空间已爆满的问题
- 第三十章 elk(1) - 第一种架构(最简架构)
- Codeforces 757C - Felicity is Coming!
- 依赖包的添加和自动检测机制
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
- linux系统常见操作,Linux系统基本操作
- python中的lambda函数用法--无需定义函数名的函数或子程序,避免代码充斥着大量单行函数
- 什么事,是你当了领导才明白的?(转)
- npm 查看登陆账号_自定义npm 及问题整理
- ROS kinetic自定义路径规划算法
- java jvm dump文件_各种获取JVM DUMP的方法
- 生成开端原著小说词云
- JVM进阶(六)——鲜为人知的二次标记
- java计算机毕业设计科普网站源码+mysql数据库+系统+lw文档+部署
- 数据结构实验课_实验四 队列
- 第九天 03-破解linux密码
- 解读这40项IT技能都能帮你年薪超过12万美元
- 一键抠图怎么弄?图片怎样变透明色背景?