[HDU5324]Boring Class
sol
字典序最小可以通过倒着\(dp\)解决。对每个\(i\)记录它可以转移到的\(dp\)值最大且字典序最小的\(nxt_i\)。
尝试着写一下\(dp\)式子。
\]
同时要保证\(j\)最小。
对\(R\)数组全部去相反数之后相当于是一个二维的最长非降子序列。
直接把所有决策往树套树里面插就行了。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
const int N = 5e4+5;
struct segment_tree{int ls,rs,v;}t[N*150];
int n,a[N],b[N],o1[N],o2[N],len1,len2,rt[N],tot,dp[N],nxt[N],ans,start;
int better(int i,int j)
{
if (!i) return j;
if (dp[i]^dp[j]) return dp[i]>dp[j]?i:j;
return i<j?i:j;
}
void modify(int &x,int l,int r,int p,int v)
{
if (!x) x=++tot;t[x].v=better(t[x].v,v);
if (l==r) return;int mid=l+r>>1;
if (p<=mid) modify(t[x].ls,l,mid,p,v);
else modify(t[x].rs,mid+1,r,p,v);
}
int query(int x,int l,int r,int ql,int qr)
{
if (!x||l>=ql&&r<=qr) return t[x].v;
int mid=l+r>>1;
if (qr<=mid) return query(t[x].ls,l,mid,ql,qr);
if (ql>mid) return query(t[x].rs,mid+1,r,ql,qr);
return better(query(t[x].ls,l,mid,ql,qr),query(t[x].rs,mid+1,r,ql,qr));
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
for (int i=1;i<=tot;++i) t[i].ls=t[i].rs=t[i].v=0;
tot=len1=len2=ans=start=0;
for (int i=1;i<=n;++i) o1[++len1]=a[i]=gi();
for (int i=1;i<=n;++i) o2[++len2]=b[i]=1e9-gi();
sort(o1+1,o1+len1+1);len1=unique(o1+1,o1+len1+1)-o1-1;
sort(o2+1,o2+len2+1);len2=unique(o2+1,o2+len2+1)-o2-1;
for (int i=1;i<=n;++i)
{
a[i]=lower_bound(o1+1,o1+len1+1,a[i])-o1;
b[i]=lower_bound(o2+1,o2+len2+1,b[i])-o2;
}
for (int i=n;i;--i)
{
int res=0;
for (int j=a[i];j;j-=j&-j)
res=better(res,query(rt[j],1,len2,1,b[i]));
dp[i]=dp[res]+1;nxt[i]=res;
if (dp[i]>=ans) ans=dp[i],start=i;
for (int j=a[i];j<=len1;j+=j&-j)
modify(rt[j],1,len2,b[i],i);
}
printf("%d\n",ans);
for (int i=start;i;i=nxt[i])
{
printf("%d",i);
if (nxt[i]) printf(" ");//防PE
}
puts("");
for (int i=1;i<=len1;++i) rt[i]=0;
}
return 0;
}
[HDU5324]Boring Class的更多相关文章
- [2015hdu多校联赛补题]hdu5324 Boring Class
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5324 题意:给你一个二维的序列,让你找出最长的第一维升第二维降的子序列(如果多个答案,输出字典序最小) ...
- hihoCoder 1430 : A Boring Problem(一琐繁题)
hihoCoder #1430 : A Boring Problem(一琐繁题) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 As a ...
- sdut 2610:Boring Counting(第四届山东省省赛原题,划分树 + 二分)
Boring Counting Time Limit: 3000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 In this problem you a ...
- HDU 4358 Boring counting(莫队+DFS序+离散化)
Boring counting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others) ...
- sdutoj 2610 Boring Counting
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2610 Boring Counting Time ...
- hdu 4358 Boring counting dfs序+莫队+离散化
Boring counting Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 98304/98304 K (Java/Others) ...
- 后缀数组 --- HDU 3518 Boring counting
Boring counting Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=3518 Mean: 给你一个字符串,求:至少出 ...
- HDU 5793 A Boring Question (逆元+快速幂+费马小定理) ---2016杭电多校联合第六场
A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- SDUT 2610 Boring Counting(离散化+主席树区间内的区间求和)
Boring Counting Time Limit: 3000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descriptio ...
随机推荐
- Python异步非阻塞IO多路复用Select/Poll/Epoll使用,线程,进程,协程
1.使用select模拟socketserver伪并发处理客户端请求,代码如下: import socket import select sk = socket.socket() sk.bind((' ...
- 对称加密,API加密
用于API加密,双方约定好signature_key对请求的参数进行处理 处理步骤如下 把请求的数据生成为key=>value的形式,然后拼接生成arg_key arg_key加上双方约定的si ...
- OS X 与传统Unix的一点区别
在传统的Unix系统或者Linux系统中,你是很难在根目录下找到大写开头的文件夹的, 但是看一下OS X: ls / Applications Users etc private var Develo ...
- 建议40:深入掌握ConfigParser
# -*- coding:utf-8 -*- ''' 1.getboolean() 根据一定的规则将配置项的值转换为布尔值 getboolean() 的真值规则: 0.no.false 和off 都会 ...
- Windows定时任务没有执行
最近部署网站首页静态化程序,需要定时执行的,由于部署在Windows上,为了方便直接用Windows计划任务做定时了.跑了一段时间发现.首页的静态html文件日期一直是老的,手动执行程序会更新,怀疑任 ...
- 20145240 《Java程序设计》第十周学习总结
20145240 <Java程序设计>第十周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. 程序员所作的事情就是把数据发送到指定的位置 ...
- 20145240 《Java程序设计》第三次实验报告
20145240 <Java程序设计>第三次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.22 实验 ...
- 0x5C 计数类DP
cf 559C 考虑到黑色的格子很少,那么我把(1,1)变成黑色,然后按每个黑色格子接近终点的程度排序,计算黑色格子不经过另一个黑色格子到达终点的方案,对于当前的格子,要减去在它右下角的所有方案数(注 ...
- spring boot 默认配置bug
问题场景:请求很耗时,当一次请求完成后,之后的20秒内的请求很快速,在之后的第一个请求很慢! 每隔一段时间,请求就会出发解压jar的操作,不确定是操作系统的问题还是sping-boot的bug &qu ...
- myeclipse下搭建hadoop2.7.3开发环境
需要下载的文件:链接:http://pan.baidu.com/s/1i5yRyuh 密码:ms91 一 下载并编译 hadoop-eclipse-plugin-2.7.3.jar 二 将had ...