loj2056 「TJOI / HEOI2016」序列
当年我还没学cdq的时候在luogu上写过树套树的代码orzzz
ref
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, uu, vv, dp[100005], c[100005];
struct Node{
int val, zxz, zdz, idx;
}nd[100005], tmp[100005];
bool cmpzxz(Node x, Node y){
return x.zxz<y.zxz;
}
bool cmpidx(Node x, Node y){
return x.idx<y.idx;
}
int lb(int x){
return x&-x;
}
void add(int x, int v){
for(; x<=100000; x+=lb(x))
c[x] = max(c[x], v);
}
int query(int x){
int re=0;
for(; x; x-=lb(x))
re = max(re, c[x]);
return re;
}
void clr(int x){
for(; x<=100000; x+=lb(x))
c[x] = 0;
}
void cdq(int l, int r){
if(l==r) return ;
int mid=(l+r)>>1;
cdq(l, mid);
sort(nd+mid+1, nd+r+1, cmpzxz);
int qaq=l;
for(int i=mid+1; i<=r; i++){
while(qaq<=mid && nd[qaq].val<=nd[i].zxz){
add(nd[qaq].zdz, dp[nd[qaq].idx]);
qaq++;
}
dp[nd[i].idx] = max(dp[nd[i].idx], query(nd[i].val)+1);
}
for(int i=l; i<qaq; i++) clr(nd[i].zdz);
sort(nd+mid+1, nd+r+1, cmpidx);
cdq(mid+1, r);
int jj=l, kk=mid+1;
for(int i=l; i<=r; i++)
if(jj<=mid && (kk>r || nd[jj].val<=nd[kk].val)) tmp[i] = nd[jj++];
else tmp[i] = nd[kk++];
for(int i=l; i<=r; i++)
nd[i] = tmp[i];
}
int main(){
cin>>n>>m;
for(int i=1; i<=n; i++){
scanf("%d", &nd[i].val);
nd[i].zdz = nd[i].zxz = nd[i].val;
nd[i].idx = i;
dp[i] = 1;
}
for(int i=1; i<=m; i++){
scanf("%d %d", &uu, &vv);
nd[uu].zdz = max(nd[uu].zdz, vv);
nd[uu].zxz = min(nd[uu].zxz, vv);
}
cdq(1, n);
int ans=0;
for(int i=1; i<=n; i++)
ans = max(ans, dp[i]);
cout<<ans<<endl;
return 0;
}
loj2056 「TJOI / HEOI2016」序列的更多相关文章
- 【LOJ】#2056. 「TJOI / HEOI2016」序列
题解 这个我们处理出来每一位能变化到的最大值和最小值,包括自身 然后我们发现 \(f[i] = max(f[i],f[j] + 1) (mx[j] <= a[i] && a[j] ...
- loj #2055. 「TJOI / HEOI2016」排序
#2055. 「TJOI / HEOI2016」排序 题目描述 在 2016 年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个 ...
- loj#2054. 「TJOI / HEOI2016」树
题目链接 loj#2054. 「TJOI / HEOI2016」树 题解 每次标记覆盖整棵字数,子树维护对于标记深度取max dfs序+线段树维护一下 代码 #include<cstdio> ...
- 「TJOI / HEOI2016」字符串
「TJOI / HEOI2016」字符串 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为 \(n\) 的字符串 \(s\),和 ...
- AC日记——#2054. 「TJOI / HEOI2016」树
#2054. 「TJOI / HEOI2016」树 思路: 线段树: 代码: #include <cstdio> #include <cstring> #include < ...
- AC日记——#2057. 「TJOI / HEOI2016」游戏 LOJ
#2057. 「TJOI / HEOI2016」游戏 思路: 最大流: 代码: #include <cstdio> #include <cstring> #include &l ...
- loj2058 「TJOI / HEOI2016」求和 NTT
loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k ...
- 【LOJ】#2055. 「TJOI / HEOI2016」排序
题解 看错题了,我以为是询问Q是个数字,问它在哪个位置 我一想这不直接01序列搞一下就好了嘛(事实上是012) 然后呢,我发现样例没过. 啊我看错题了,问的是Q这个位置是啥-- 哦,套用我之前的想法不 ...
- LOJ #2058「TJOI / HEOI2016」求和
不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Sol ...
随机推荐
- koa源码分析
最近项目要使用koa,所以提前学习一下,顺便看了koa框架的源码. 注:源码是koa2.x koa的源码很简洁,关键代码只有4个文件,当然还包括一些依赖npm包 const Koa = require ...
- SVN Working copy '***' locked
问题描述: 用svn在项目文件夹下commit或者update时会出现错误提示“working copy locked” 解决方法: 1.在项目文件夹下,单击鼠标右键,选择tortoisesvn-&g ...
- [转]vim 快捷键整理
Linux中vim编辑器的功能非常强大,许多常用快捷键用起来非常方便,这里将我学vim入门时学的一些常用的快捷键分享给大家一下,希望可以帮助你们. 原文地址:http://blog.csdn.net ...
- mysql用户权限操作
mysql用户权限操作1.创建用户mysql -urootcreate database zabbix default charset utf8;grant all on zabbix.* to za ...
- git图形管理工具
在windows下使用git命令行工具对非开发人员还是挺困难的,还好有TortoiseGit这个工具svn客户端用TortoiseSVNgit客户端用TortoiseGit 网址:https://to ...
- pc端的动态效果
一 图片围绕着某一个确定的圆心运动 几张图片在一个圆开始运动的几种情况 https://github.com/GainLoss/Plug-in-unit 这里面有两种情况
- 文件IO——将文件dfs的文件内容第三个字节之后的内容复制到文件dfd中
/* 使用文件IO将文件fds中的内容复制到文件fdd中去 1.创建两个文件描述符 2.使用open()方法分别以只读只写方式将文件描述符符文件连接 3.将读位置后移三位 4.将fds内容存储到缓冲区 ...
- 【总结】Oracle sql 中的字符(串)替换与转换
1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串repla ...
- C++中的异常安全性
http://blog.csdn.net/bonchoix/article/details/8046727 一个函数如果说是“异常安全”的,必须同时满足以下两个条件:1.不泄漏任何资源:2.不允许破坏 ...
- 5分钟了解Java 12 八大新特性
Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性.通过本文可以在5分钟内快速了解 Java 12 新特性. 1 Switch 表达式 使用Java 12,switch不仅可以作 ...