「HEOI2016/TJOI2016」序列
题目链接
Solution
首先考虑最暴力的dp
我们设:
\(f[i]\)表示选择\(i\)以后所能形成的满足条件的子序列的最大值
\(minx[i]\)表示\(i\)能转换为的最小值
\(maxx[i]\)表示\(i\)能转换为的最大值
于是转移的条件显然了:
- \(i>j\)
- \(minx[i]>=a[j]\)
- \(a[i]>=maxx[i]\)
对于暴力直接枚举j转移就好了,但却只有50分,想想正解。
条件很明显是三维偏序问题啊。我们可以随便用一些数据结构:
如: cdq分治,树套树什么的。这里就不详细介绍了
code
线段树+树状数组
#include<bits/stdc++.h>
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int read() {
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
struct node {
int l,r,v;
} a[100001*100];
int tot,root[100010];
void update(int &k,int l,int r,int pos,int v) {
if(k==0)
k=++tot;
a[k].v=max(a[k].v,v);
if(l==r)
return ;
int mid=(l+r)>>1;
if(pos<=mid) update(a[k].l,l,mid,pos,v);
else update(a[k].r,mid+1,r,pos,v);
}
int find(int k,int l,int r,int begin,int end) {
if(k==0)
return 0;
if(l==begin&&r==end)
return a[k].v;
int mid=(l+r)>>1;
if(end<=mid)
return find(a[k].l,l,mid,begin,end);
else if(begin>mid)
return find(a[k].r,mid+1,r,begin,end);
else return max(find(a[k].l,l,mid,begin,mid),find(a[k].r,mid+1,r,mid+1,end));
}
#define lowbit(x) (x&(-x))
void add(int x,int y,int v) {
while(x<=100005)
update(root[x],1,100005,y,v),x+=lowbit(x);
}
int sum(int x,int y) {
int js=0;
while(x)
js=max(find(root[x],1,100005,1,y),js),x-=lowbit(x);
return js;
}
int b[100010],minx[100010],maxx[100010];
int main() {
int n=read(),m=read(),x,y,ans=0;
for(int i=1; i<=n; i++)
b[i]=minx[i]=maxx[i]=read();
for(int i=1; i<=m; i++)
x=read(),y=read(),maxx[x]=max(maxx[x],y),minx[x]=min(minx[x],y);
for(int i=1; i<=n; i++) {
int js=sum(minx[i],b[i])+1;
ans=max(ans,js);
add(b[i],maxx[i],js);
}
cout<<ans;
}
「HEOI2016/TJOI2016」序列的更多相关文章
- 「HEOI2016/TJOI2016」排序
「HEOI2016/TJOI2016」排序 题目大意 给定一个 \(1\) 到 \(n\) 的排列,每次可以对这个序列的一个区间进行升序/降序排序,求所有操作后第 \(q\) 个位置上的数字. 题解 ...
- 「HEOI2016/TJOI2016」 排序
题目链接 戳我 \(Solution\) 这道题在线的做法不会,所以这里就只讲离线的做法. 因为直接排序的话复杂度显然不对.但是如果数列为\(01\)串的话就可以让复杂度变成对的了 那么\(01\)串 ...
- 「HNOI 2016」 序列
\(Description\) 给你一个序列,每次询问一个区间,求其所有子区间的最小值之和 \(Solution\) 这里要用莫队算法 首先令\(val\)数组为原序列 我们考虑怎么由一个区间\([l ...
- Loj #3059. 「HNOI2019」序列
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...
- 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; ...
- 「HNOI2016」序列 解题报告
「HNOI2016」序列 有一些高妙的做法,懒得看 考虑莫队,考虑莫队咋移动区间 然后你在区间内部找一个最小值的位置,假设现在从右边加 最小值左边区间显然可以\(O(1)\),最小值右边的区间是断掉的 ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告
P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...
- AC日记——「SDOI2017」序列计数 LibreOJ 2002
「SDOI2017」序列计数 思路: 矩阵快速幂: 代码: #include <bits/stdc++.h> using namespace std; #define mod 201704 ...
- loj #2051. 「HNOI2016」序列
#2051. 「HNOI2016」序列 题目描述 给定长度为 n nn 的序列:a1,a2,⋯,an a_1, a_2, \cdots , a_na1,a2,⋯,an,记为 a[1: ...
随机推荐
- thinkphp实现多个子查询语句
sql语句博大精深 理解好sql语句,就能用好thinkphp等框架中的数据库操作 原sql SELECT a.*,b.* from (SELECT a.id as opener_id,a.name, ...
- mybatis foreach标签的解释 与常用之处
情景:查询数据库中文章的相关文章 文章为一个表 字段tags为相关文章字符串中间用','逗号进行啦分割 查询完一个文章后可以把tags字段构造为一个List<String> 然后利用这 ...
- MyEclipse10.6/Eclipse4.2 集成 flash builder 4.6
MyEclipse10.6/Eclipse4.2 集成 flash builder 4.61. 安装 Myeclipse10.6 或 Eclipse 4.2 以及 Flash builder 4.6 ...
- leetcode539
public class Solution { public int FindMinDifference(IList<string> timePoints) { * ]; foreach ...
- Mycat基本搭建
1.Java环境检查与安装(略) [检查] [root@mysqldb tmp]# java -verson -bash: java: command not found [直接解压安装] [root ...
- GDB常用命令简介
1.启动调试程序 gdb 调试对象,例如gdb app 2.运行程序 run 或这简写为r 3.设置断点 有几种不同的方式 1)break line 2) break file:line 3) bre ...
- JavaWeb之JSP入门
JSP原理及执行过程 流程图分析 用户发起请求,用户通过浏览器访问jsp页面,浏览器将HTTP协议的请求部分发送到服务端. 服务端获取请求部分,分析请求,发现本次的请求的的是jsp页面,jsp引擎按照 ...
- 2014年:Linux和开源的福祸之年
(1)Heartbleed漏洞 Heartbleed漏洞,是今年开源软件曝出的最大糗事.Heartbleed漏洞是OpenSSL的重大漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在 ...
- GNU 和 g++(转)
百度知道 GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的.它的目标是创建一套完全自由的操作系统.Richard Stallman最早是在net.unix ...
- Installing R under Unix-alikes
Linux上R的安装 可参考https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Installing-R-under-Unix_ ...