【BZOJ4553】[HAOI2016&TJOI2016]序列
【BZOJ4553】[HAOI2016&TJOI2016]序列
题面
题解
一定要仔细看题啊qwq。。。
我们设$mn[i],mx[i]$表示第$i$个位置上最小出现、最大出现的值。
则选出的序列要满足
$ i<j\\ a[i]\leq mn[j]\\ mx[i]\leq a[j] $
这™不就是个三维偏序吗?
一边$CDQ$一边$dp$就好了
注意分治时注意清空
代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
inline int gi() {
register int data = 0, w = 1;
register char ch = 0;
while (!isdigit(ch) && ch != '-') ch = getchar();
if (ch == '-') w = -1, ch = getchar();
while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
return w * data;
}
const int MAX_N = 1e5 + 5;
void chkmin(int &x, int y) { if (x > y) x = y; }
void chkmax(int &x, int y) { if (x < y) x = y; }
int N, a[MAX_N], mx[MAX_N], mn[MAX_N], f[MAX_N];
struct Node { int x, y, z, id; } t[MAX_N];
bool cmp_id (Node a, Node b) { return a.id < b.id; }
bool cmp_x (Node a, Node b) { return a.x == b.x ? a.y < b.y : a.x < b.x; }
bool cmp_y (Node a, Node b) { return a.y == b.y ? a.z < b.z : a.y < b.y; }
int c[MAX_N], M;
inline int lb(int x) { return x & -x; }
void add(int x, int v) { while (x <= M) chkmax(c[x], v), x += lb(x); }
int sum(int x) { int res = 0; while (x > 0) chkmax(res, c[x]), x -= lb(x); return res; }
void Set(int x) { while (x <= M) c[x] = 0, x += lb(x); }
void Div(int l, int r) {
if (l == r) return (void)chkmax(f[t[l].id], 1);
int mid = (l + r) >> 1;
Div(l, mid);
sort(&t[l], &t[mid + 1], cmp_x);
sort(&t[mid + 1], &t[r + 1], cmp_y);
for (int i = mid + 1, j = l; i <= r; i++) {
while (t[j].x <= t[i].y && j <= mid) add(t[j].z, f[t[j].id]), ++j;
chkmax(f[t[i].id], sum(t[i].x) + 1);
}
for (int i = l; i <= mid; i++) Set(t[i].z);
sort(&t[l], &t[r + 1], cmp_id);
Div(mid + 1, r);
}
int main () {
N = gi(), M = gi();
for (int i = 1; i <= N; i++) a[i] = mn[i] = mx[i] = gi();
while (M--) {
int x = gi(), y = gi();
chkmax(mx[x], y), chkmin(mn[x], y);
}
for (int i = 1; i <= N; i++) t[i] = (Node){a[i], mn[i], mx[i], i}, chkmax(M, mx[i]);
Div(1, N);
int ans = 0;
for (int i = 1; i <= N; i++) chkmax(ans, f[i]);
printf("%d\n", ans);
return 0;
}
【BZOJ4553】[HAOI2016&TJOI2016]序列的更多相关文章
- [BZOJ4553][HEOI2016/TJOI2016]序列
传送门 好像是DP再套个裸的CDQ? 树套树是不可能写树套树的,这辈子都不可能写树套树的 对于一个 \(i\) ,设它最小为 \(a_i\) ,原数为 \(b_i\) ,最大为 \(c_i\) \(f ...
- 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组
[BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...
- cdq分治(hdu 5618 Jam's problem again[陌上花开]、CQOI 2011 动态逆序对、hdu 4742 Pinball Game、hdu 4456 Crowd、[HEOI2016/TJOI2016]序列、[NOI2007]货币兑换 )
hdu 5618 Jam's problem again #include <bits/stdc++.h> #define MAXN 100010 using namespace std; ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告
P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治
原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...
- BZOJ4553:[HEOI2016/TJOI2016]序列——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4553 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某 ...
- BZOJ4553 - [TJOI2016]序列
Portal Description 给出一个\(n(n\leq10^5)\)个数的数列\(\{a_n\}\)和\(m(m\leq10^5)\)个形如\((x,y)\)的变化,表示\(a_x\)可以变 ...
- 题解 P4093 【[HEOI2016/TJOI2016]序列】
这道题原来很水的? noteskey 一开始以为是顺序的 m 个修改,然后选出一段最长子序列使得每次修改后都满足不降 这 TM 根本不可做啊! 于是就去看题解了,然后看到转移要满足的条件的我发出了黑人 ...
随机推荐
- 【OpenCV】【MFC】图片、视频、摄像头输入响应【详细图解】
记住新建项目后,要配置OpenCV环境!参考链接http://blog.csdn.net/zy122121cs/article/details/49180541 做工程搭建框架什么的,基本的要熟练啊. ...
- BZOJ 1061 志愿者招募 最小费用流&&线性规划建模
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1061 题目大意: 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主 ...
- Mac版Mysql Workbench不展示Schema
Mac版的Mysql Workbench会不展示Schema,如下图 操作如下 cd ~/Library/Application\ Support/MySQL/Workbench/ rm wb_sta ...
- Kali-linux在树莓派上破解无线网络
大部分的命令可以正常的运行在BackTrack5或Kali上.在Kali上可以实现的无线渗透测试,在树莓派上也可以运行.在第1章中介绍了在树莓派上安装Kali Linux操作系统,下面将介绍在树莓派上 ...
- ethereumjs/ethereumjs-vm-5-vm对象
1.运行文件 var Buffer = require('safe-buffer').Buffer // use for Node.js <4.5.0 var VM = require('./i ...
- centos上nginx的安装
安装步骤: 1.下载nginx,执行:wget http://nginx.org/download/nginx-1.10.2.tar.gz 2.解压,执行:tar vxzf nginx-1.10. ...
- PAT——1028. 人口普查
某城镇进行人口普查,得到了全体居民的生日.现请你写个程序,找出镇上最年长和最年轻的人. 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过200岁的老人,而今天是2014年9月 ...
- CTreeCtrl::HitTest
CTreeCtrl::HitTest 调用此函数确定指定的位置点相对树视图控件的工作区的. HTREEITEM HitTest( CPoint pt, UINT* pFlags = NULL ...
- 404 Note Found 队-Alpha 事后诸葛亮
目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结: 本小组和其他组的评分 分工和贡献分 全组讨论的照片 问题 第一组提问回答:爸爸饿了队 第二组提问回答:拖 ...
- 系统构架篇之基于SSDB的二级缓存
1.什么是ssdb 你可以把ssdb理解成redis.不同之处在于redis缓存的数据是在内存中的,所能缓存的数据大小受内存大小的限制,一般不适合缓存大量的数据.而ssdb将数据保存在磁盘中,数据量大 ...