Nonsense Time
Nonsense Time
时间限制: 10 Sec 内存限制: 128 MB
题目描述
For each i, find the longest increasing subsequence among available elements after the first i stages.
输入
In each test case, there is one integer n(1≤n≤50000) in the first line, denoting the size of permutation.
In the second line, there are n distinct integers p1,p2,...,pn(1≤pi≤n), denoting the permutation.
In the third line, there are n distinct integers k1,k2,...,kn(1≤ki≤n), describing each stage.
It is guaranteed that p1,p2,...,pn and k1,k2,...,kn are generated randomly.
输出
样例输入
1
5
2 5 3 1 4
1 4 5 3 2
样例输出
1 1 2 3 3
题意:有一个数列, 一开始这些数都不可用,接下来每次会让一个位置上的数变得可用,求每次操作后可用数的LIS。
思路:前置知识:长度为N的全排列的LIS的期望为sqrt(N),于是可以倒着让这些数变得不可用,如果它不是LIS上的数就对答案没影响,否则就暴力重新nlogn跑LIS。因为LIS的期望长度为sqrt(N),所以删除某一个数,该数是LIS上的数的概率是1/sqrt(N),也就是说期望会有sqrt(N)个数在LIS上,于是我们最多跑sqrt(N)遍暴力,期望复杂度:O(n*sqrt(n)*log(n))。
#include<bits/stdc++.h>
using namespace std;
const int N = ;
int arr[N],b[N]={},len;
int k[N],vis[N]={};
int pre[N];
int if_lis[N],id[N]; int Serach(int num,int low,int high)
{
int mid;
while (low<=high) {
mid=(low+high)>>;
if (num>=b[mid]) low=mid+;
else high=mid-;
}
return low;
} void DP(int n)
{
len=;
b[len]=-;
id[len]=-;
for(int i=;i<=n;i++)
{
if(!vis[i])continue;
if(arr[i]>=b[len])
{
len++;
b[len]=arr[i]; id[len]=i;
pre[i]=id[len-];
}
else
{
int pos=Serach(arr[i],,len);
b[pos]=arr[i]; pre[i]=id[pos-];
id[pos]=i;
}
} memset(if_lis,,sizeof(if_lis));
int now=id[len];
while(now!=-)
{
if_lis[now]=;
now=pre[now];
}
} int ans[N];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&arr[i]);
for(int i=;i<=n;i++)scanf("%d",&k[i]);
for(int i=;i<=n;i++)vis[i]=; DP(n);
ans[n]=len; for(int i=n-;i>=;i--)
{
vis[k[i+]]=;
if(!if_lis[k[i+]])
{
ans[i]=ans[i+];
continue;
}
DP(n);
ans[i]=len;
}
for(int i=;i<=n;i++)printf("%d%c",ans[i],i==n ? '\n' : ' ');
}
return ;
}
Nonsense Time的更多相关文章
- Nonsense Alphabet
Nonsense Alphabet A was an ant Who seldom stood still, And who made a nice house In the side of a hi ...
- 【HDU6635】Nonsense Time
题目大意:给定一个长度为 N 的序列,开始时所有的位置都不可用,每经过一个时间单位,都会有一个位置被激活.现给定激活顺序的序列,求每次激活之后全局的最长上升子序列的长度,保证数据随机. 题解: 引理: ...
- [2019杭电多校第六场][hdu6635]Nonsense Time
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6635 题意是说一开始所有数都冻结,第i秒会解冻第ki个数,求每秒状态下的最长上上升子序列长度. 这种题 ...
- 【HDOJ6635】Nonsense Time(时间倒流,lis)
题意:给定n个数的数列,第i个数为a[i],刚开始所有位置都处于禁用状态,第i次之后位置p[i]变为可用,求每次变化后的lis长度 n,a[i],p[i]<=5e4 保证a[i],p[i]均为随 ...
- 2019 Multi-University Training Contest 6 Nonsense Time (纯暴力)
题意:给你一个n的排列,起初这些数都不能用, 然后还有一个数组 第 i 个数表示下标为 i 的数能够使用. 问每一个 i 对应的最长上升子序列. 题解: 可以通过倒推,从后往前考虑转化一下 ,然后就是 ...
- 软件公司为何要放弃MongoDB?
本文转至:http://database.51cto.com/art/201503/469510_all.htm(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Olery成立于2010年, ...
- PHP开发工具+电子书+视频教程等资料下载汇总
本汇总帖包括如下内容: PHP开发工具.PHP IDE PHP学习资源 基础.进阶类 PHP学习资源 高级及应用类 经典PHP视频教程系列 1. PHP开发工具.PHP IDE: PHP开发工具:Ze ...
- ACM 计算几何中的精度问题(转)
http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模 ...
- C++之路进阶——poj3461(Oulipo)
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 35694 Accepted: 14424 Descript ...
随机推荐
- TortoiseGit可能遇到Permission denied (publickey).
1.检测是不是没设置公钥和私钥 2.公钥有没有添加到git账户里面去 3.检测如下图路径正确不正确
- 提问(prompt 消息对话框)用于询问一些需要与用户交互的信息。弹出消息对话框(包含一个确定按钮、取消按钮与一个文本输入框)
提问(prompt 消息对话框) prompt弹出消息对话框,通常用于询问一些需要与用户交互的信息.弹出消息对话框(包含一个确定按钮.取消按钮与一个文本输入框). 语法: prompt(str1, s ...
- 【核心核心】10.Spring事务管理【TX】XML+注解方式
转账案例环境搭建 1.引入JAR包 IOC的6个包 AOP的4个包 C3P0的1个包 MySQL的1个驱动包 JDBC的2个目标包 整合JUnit测试1个包 2.引入配置文件 log4j.proper ...
- 安卓中 使用html来使文字变色Html.fromHtml
在这里 我是用的html使文字的个别颜色变红 String textStr = " 本课程为<font color=\"#FF0000\">" + ...
- java基础之System类
System类概述System 类包含一些有用的类字段和方法.它不能被实例化. 成员方法 public static void gc()运行垃圾回收器 public static void exit( ...
- 12_PCA之探究用户对物品类别的喜好细分降维
案例: 探究:用户对物品类别的喜好细分降维. 背景:把用户分成几个类别,分类的依据是用户购买了哪些物品. 先看商品products.csv数据,有product_id,product_name,ais ...
- Activiti流程定义部署、删除
1.部署流程定义 部署流程定义也可以认为是增加流程定义. 首先创建流程引擎对象(公用的方法) private ProcessEngine processEngine = ProcessEngin ...
- 重装一次CM的坑爹记录
今天同事要对测试环境进行降级(测试高于生产所以要求降级),自己不经常搞运维,但是无奈测试环境没运维管理只能自己上了. 流程和遇到问题按数字表示. 1.重装CM(clouder manager)这个过程 ...
- 大批量数据导出excel
有次面试时,老板问我大批量数据一次性导出会有什么问题 感谢度娘提供,感谢原博主提供 https://www.cnblogs.com/zou90512/p/3989450.html
- leetcode 75 Sorted Colors
两种解法 1)记录0和1的个数 然后按照记录的个数将0和1重新放入原数组,剩下的补2 2)双指针left,right left表示0~left-1都为0,即i之前都为0 right表示right+1~ ...