【BZOJ4553】[HAOI2016&TJOI2016]序列

题面

bzoj

洛谷

题解

一定要仔细看题啊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]序列的更多相关文章

  1. [BZOJ4553][HEOI2016/TJOI2016]序列

    传送门 好像是DP再套个裸的CDQ? 树套树是不可能写树套树的,这辈子都不可能写树套树的 对于一个 \(i\) ,设它最小为 \(a_i\) ,原数为 \(b_i\) ,最大为 \(c_i\) \(f ...

  2. 【BZOJ4553】[Tjoi2016&Heoi2016]序列 cdq分治+树状数组

    [BZOJ4553][Tjoi2016&Heoi2016]序列 Description 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能 ...

  3. 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; ...

  4. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...

  5. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  6. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  7. BZOJ4553:[HEOI2016/TJOI2016]序列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4553 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某 ...

  8. BZOJ4553 - [TJOI2016]序列

    Portal Description 给出一个\(n(n\leq10^5)\)个数的数列\(\{a_n\}\)和\(m(m\leq10^5)\)个形如\((x,y)\)的变化,表示\(a_x\)可以变 ...

  9. 题解 P4093 【[HEOI2016/TJOI2016]序列】

    这道题原来很水的? noteskey 一开始以为是顺序的 m 个修改,然后选出一段最长子序列使得每次修改后都满足不降 这 TM 根本不可做啊! 于是就去看题解了,然后看到转移要满足的条件的我发出了黑人 ...

随机推荐

  1. PhoneGap模仿微信摇一摇功能

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. KMP算法模板&&扩展

    很不错的学习链接:https://blog.csdn.net/v_july_v/article/details/7041827 具体思路就看上面的链接就行了,这里只放几个常用的模板 问题描述: 给出字 ...

  3. 一篇文章详解iOS之AutoResizing、AutoLayout、sizeClass来龙去脉

    前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新.目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种 ...

  4. 【CSS】iconfont的使用

    说到浏览器对@font-face的兼容问题,这里涉及到一个字体format的问题,因为不同的浏览器对字体格式支持是不一致的,这样大家有必要了解一下,各种版本的浏览器支持什么样的字体,前面也简单带到了有 ...

  5. selenium + python自动化测试unittest框架学习(三)webdriver元素操作(二)

    上一篇是元素的定位,那么定位元素的目的就是对元素进行操作,例如写入文本,点击按钮,拖动等等的操作 (1)简单元素操作 简单元素操作 find_element_by_id("kw") ...

  6. Spring(十二)之JDBC框架

    JDBC 框架概述 在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQ ...

  7. (转)进程process和线程thread的关系

    写的很好很明白cpu每次只能执行一个进程,所以其他进程会挂起 在一个进程中,允许存在n个线程,n个线程共享这个进程中的资源 多个线程在共享的时候存在资源互斥,一次只能一个线程,会需要加锁 一次存在固定 ...

  8. PHP过滤

    1.过滤是不是URL(后台过滤) $url = "https://www.baidu.com"; if(!filter_var($url,FILTER_VALIDATE_URL)) ...

  9. 404 Note Found 队-Alpha4

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:丹丹 组员7:何家伟 组员8:政演 组员9:鸿杰 组员10:刘一好 组员:何宇恒 展示组内最新 ...

  10. 深入理解计算机系统——系统级I/O

    一.UNIX I/O     在UNIX系统中有一个说法,一切皆文件.所有的I/O设备,如网络.磁盘都被模型化为文件,而所有的输入和输出都被当做对相应文件的读和写来执行.这种将设备映射为文件的方式,允 ...