洛谷 P3928 Sequence
题目描述
小强喜欢数列。有一天,他心血来潮,写下了三个长度均为n的数列。
阿米巴也很喜欢数列。但是他只喜欢其中一种,波动数列。
阿米巴把他的喜好告诉了小强。小强便打算找出这三个数列内的最长波动数列。
也就是说,如果我们将三个数列记做a[n][3],他必须要构造一个二元组序列:<p[i], q[i]>,使得对于任何 i>1 有:
p[i] > p[i-1]
若q[i] = 0,a[p[i]][q[i]] >= a[p[i-1]][q[i-1]]
若q[i] = 1,a[p[i]][q[i]] <= a[p[i-1]][q[i-1]]
若q[i] = 2,只要保持段内同向即可(就是对于连续的一段q[i]=2,要么都有a[p[i]][q[i]] >= a[p[i-1]][q[i-1]],要么都有a[p[i]][q[i]] <= a[p[i-1]][q[i-1]])。
小强希望这个二元组序列尽可能长。
提示:当q[i] != q[i-1]时,数列的增减性由q[i]而非q[i-1]决定。
清晰版题目描述
小强拿到一个3×n的数组,要在每一列选一个数(或者不选),满足以下条件:
1.如果在第一行选,那它必须大于等于上一个数
2.如果在第二行选,那么必须小于等于上一个数
3.如果在第三行选,对于连续的一段在第三行选的数,必须满足方向相同(都小于等于上一个数或者都大于等于上一个数)
清晰版描述简直坑人。。。
思路非常明显,智障dp。状态转移方程不读错题的话简直秒出。之后考虑转移优化。显然,一个范围内的最大值可以用线段树维护,当然要事先吧数据离散化。代码很简单,二十分钟就可以敲完,然后我就爆了一个钟的空间23333
#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000000+10
typedef long long LL;
int n,tot=,ans=,pos[][MAXN],dp[][MAXN],tr[][MAXN*];
LL a[][MAXN],b[MAXN*];
void pushup(int t,int k){tr[t][k]=max(tr[t][k<<],tr[t][k<<|]);}
void build(int t,int k,int l,int r){
tr[t][k]=;
if(l==r)return;
int mid=(l+r)>>;
build(t,k<<,l,mid);
build(t,k<<|,mid+,r);
}
void update(int t,int k,int l,int r,int p,int val){
if(l==r&&l==p){
tr[t][k]=val;
return;
}
int mid=(l+r)>>;
if(p<=mid)update(t,k<<,l,mid,p,val);
else update(t,k<<|,mid+,r,p,val);
pushup(t,k);
}
int query(int t,int k,int l,int r,int L,int R){
if(l>=L&&r<=R)return tr[t][k];
int mid=(l+r)>>;
if(R<=mid)return query(t,k<<,l,mid,L,R);
else if(L>mid)return query(t,k<<|,mid+,r,L,R);
else return max(query(t,k<<,l,mid,L,R),query(t,k<<|,mid+,r,L,R));
}
int main(){
//freopen("data.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=;i++)
for(int j=;j<=n;j++){
scanf("%lld",&a[i][j]);
b[++tot]=a[i][j];
}
sort(b+,b+tot+);
tot=unique(b+,b+tot+)-b,tot--;
for(int i=;i<=;i++)build(i,,,tot);
for(int i=;i<=;i++)
for(int j=;j<=n;j++)
pos[i][j]=lower_bound(b+,b+tot+,a[i][j])-b; for(int i=;i<=;i++)update(i,,,tot,pos[i==?:i][],),dp[i][]=;
for(int i=;i<=n;i++){
for(int k=;k<=;k++)dp[k][i]=;
for(int k=;k<=;k++){
if(k==)
for(int j=;j<=;j++)
dp[k][i]=max(dp[k][i],query(j,,,tot,,pos[][i])+);
else if(k==)
for(int j=;j<=;j++)
dp[k][i]=max(dp[k][i],query(j,,,tot,pos[][i],tot)+);
else if(k==)
for(int j=;j<=;j++)
dp[k][i]=max(dp[k][i],query(j,,,tot,pos[][i],tot)+);
else
for(int j=;j<=;j++)
if(j!=)dp[k][i]=max(dp[k][i],query(j,,,tot,,pos[][i])+);
}
for(int k=;k<=;k++){
update(k,,,tot,pos[k==?:k][i],dp[k][i]);
ans=max(ans,dp[k][i]);
}
}
printf("%d\n",ans);
return ;
}
洛谷 P3928 Sequence的更多相关文章
- 洛谷P3928 Sequence2(dp,线段树)
题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...
- [洛谷P5136]sequence
题目大意:有$T(T\leqslant10^5)$组询问,每次求$A_n(n\leqslant10^{18})$:$$A_n=\left\lceil\left(\dfrac{\sqrt5+1}2\ri ...
- 洛谷P3928 SAC E#1 - 一道简单题 Sequence2
提交地址 题目背景 小强和阿米巴是好朋友. 题目描述 小强喜欢数列.有一天,他心血来潮,写下了三个长度均为n的数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种,波动数列. 阿米巴把他的喜好告诉了小强. ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷UVA12995 Farey Sequence(欧拉函数,线性筛)
洛谷题目传送门 分数其实就是一个幌子,实际上就是求互质数对的个数(除开一个特例\((1,1)\)).因为保证了\(a<b\),所以我们把要求的东西拆开看,不就是\(\sum_{i=2}^n\ph ...
- 洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
题目 :Bovine Genomics G奶牛基因组 传送门: 洛谷P3667 题目描述 Farmer John owns NN cows with spots and NN cows without ...
- 洛谷P1432 倒水问题(CODEVS.1226)
To 洛谷.1432 倒水问题 题目背景 In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were co ...
- 洛谷P3459 [POI2007]MEG-Megalopolis [树链剖分]
题目传送门 MEG 题目描述 Byteotia has been eventually touched by globalisation, and so has Byteasar the Postma ...
- [洛谷P2852] [USACO06DEC]牛奶模式Milk Patterns
洛谷题目链接:[USACO06DEC]牛奶模式Milk Patterns 题目描述 Farmer John has noticed that the quality of milk given by ...
随机推荐
- Leetcode题解(十六)
44 ----------------------------------------------------------------分割线------------------------------ ...
- 2017广东工业大学程序设计竞赛决赛-tmk买礼物
tmk买礼物 Description 今天是校赛的日子,为了庆祝这么喜庆的日子,TMK打算买些礼物给女票LSH庆祝一下. TMK进入了雪梨超市,然后刚踏入的一瞬间,店主就对TMK说:“恭喜你成为了本店 ...
- Windows Message Queue
Windows Message Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- P3003 [USACO10DEC]苹果交货Apple Delivery
题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she tr ...
- 入门到熟练-Eclipse开发工具
1. 概述 本文用于Eclipse说明开发功能的各种配置.希望可以帮助到对于Eclipse工具设置不同熟练的朋友,快速上手Eclipse开发工具. 2. Eclipse的配置 2.1. 设置Eclip ...
- oracle数据库表实现主键自增功能
有关oracle中自增序列sequence+触发器trigger:实现数据表TABDATA_LIVE_CYCLE中的主键id的自增. CREATE SEQUENCE TABDATA_LIVE_CYCL ...
- 【1】maven来管理我的SSM项目
新建个maven项目,第一步当然是配置好自己需要的jar包,maven使用pom.xml管理 并不是每一个都有用,但是都是常见jar,方便以后自己调用来查找 <project xmlns=&qu ...
- HTTPS 建立连接的详细过程
HTTPS是在HTTP的基础上和ssl/tls证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听.被篡改.被伪装) 对称加密和非对称 ...
- .Net 中通用的FormatString格式符整理
格式化日期和数字的字符串经常要用到这个, 就把帮助里面的东西大概整理了一些列在这里了. 下表描述了用来格式化 DateTime 对象的标准格式说明符.格式说明符 名称 说明 d 短日期模式 显示由与当 ...
- SpringMVC注解HelloWorld
今天整理一下SpringMVC注解 欢迎拍砖 @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是 ...