小R的树(权限题)
解:考场上爆0了......
回想怎么求两个排列的最长公共子序列。
回想怎么求1~n每个数恰出现两次的两个序列的最长公共子序列。就是每个数替换为它在另一个序列里的出现位置,降序。
所以我们可以把这每个空位都倒序填入m个数,然后暴力,最后输出方案。
考虑优化。发现在每个空位的时候,这m个数都是单降的。直接拿指针在单调栈上扫,可以O(top + m)转移。
关于记录方案,每个位置记录以它结尾的lis中的前一个非-1位置,以及在这之间有多少个-1。
然后就可以把空间优化到O(n)。
#include <bits/stdc++.h> typedef long long LL;
const int N = ;
const LL INF = 0x3f3f3f3f3f3f3f3fll;; struct Node {
int a, b;
Node(int A = , int B = ) {
a = A;
b = B;
}
}frp[N], fr[N]; LL a[N], b[N], p[N];
int top, n, m;
bool vis[N]; int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%lld", &a[i]);
}
scanf("%d", &m);
for(int i = ; i <= m; i++) {
scanf("%lld", &b[i]);
}
std::sort(b + , b + m + );
std::reverse(b + , b + m + );
a[n + ] = INF;
for(int i = ; i <= n + ; i++) {
if(a[i] != -) {
int l = , r = top;
while(l < r) {
int mid = (l + r + ) >> ;
if(p[mid] < a[i]) l = mid;
else r = mid - ;
}
fr[i] = frp[r];
if(r == top) {
p[++top] = a[i];
frp[top] = Node(i, );
}
else if(p[r + ] > a[i]) {
p[r + ] = a[i];
frp[r + ] = Node(i, );
}
}
else {
int p1 = top;
for(int j = ; j <= m; j++) {
while(p1 && p[p1] >= b[j]) {
p1--;
}
Node temp = frp[p1];
temp.b++;
if(p1 == top) {
p[++top] = b[j];
frp[top] = temp;
}
else if(p[p1 + ] > b[j]) {
p[p1 + ] = b[j];
frp[p1 + ] = temp;
}
}
}
} int now = frp[top].a, p1 = n, p2 = ;
while(now) {
if(fr[now].b) {
while(p1 > now) p1--;
while(b[p2] >= a[now]) p2++;
for(int i = ; i <= fr[now].b; i++) {
while(a[p1] != -) p1--;
a[p1] = b[p2];
vis[p2] = ;
p2++;
}
}
now = fr[now].a;
} p2 = ;
for(int i = ; i <= n; i++) {
if(a[i] == -) {
while(vis[p2]) p2++;
a[i] = b[p2];
p2++;
}
} for(int i = ; i <= n; i++) {
printf("%lld ", a[i]);
}
return ;
}
AC代码
小R的树(权限题)的更多相关文章
- 洛谷 U96762 小R与三角形 题解
U96762 小R与三角形 原题链接 题目描述 小 R 所在的小镇有 n 个村落,这 n 个村落分布在一个圆周上,这些村落之间两两有直达的小路,小路可能相交,但不存在三条路交于一点.现在小 R 正好放 ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- 【codevs2370】小机房的树 LCA 倍增
2370 小机房的树 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0 ...
- Dynamic Rankings || 动态/静态区间第k小(主席树)
JYF大佬说,一星期要写很多篇博客才会有人看 但是我做题没有那么快啊QwQ Part1 写在前面 区间第K小问题一直是主席树经典题=w=今天的重点是动态区间第K小问题.静态问题要求查询一个区间内的第k ...
- 【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)
点此看题面 大致题意: 给出一个长度为\(n\)的数列\(a\)和一个长度为\(m\)的数列\(b\),求\(a\)有多少个长度为\(m\)的子串与\(b\)匹配.数列匹配指存在一种方案使两个数列中的 ...
- [poj2104]可持久化线段树入门题(主席树)
解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序 ...
- POJ 3468 线段树裸题
这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...
- HDU 2096 小明A+B --- 水题
HDU 2096 /* HDU 2096 小明A+B --- 水题 */ #include <cstdio> int main() { #ifdef _LOCAL freopen(&quo ...
- 【BZOJ】【3280】小R的烦恼
网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...
随机推荐
- vue的定位
高德定位 https://blog.csdn.net/YY110621/article/details/87921605(copy) 话不多说,直接写方法步骤,需要的直接拿去放在自己项目中即可使用先看 ...
- Django Rest framework 框架
一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...
- 集合之LinkedHashMap(含JDK1.8源码分析)
一.前言 大多数的情况下,只要不涉及线程安全问题,map都可以使用hashMap,不过hashMap有一个问题,hashMap的迭代顺序不是hashMap的存储顺序,即hashMap中的元素是无序的. ...
- react 入坑笔记(一)
一些概念: 1.组件:概念等同于 vue 中的组件,字面意思,不过 vue 中组件是以 .vue 结尾,通过 vue-loader 编译成 js,而 react 组件就是 js. 2.jsx:js 语 ...
- Spring Boot 构建电商基础秒杀项目 (十) 交易下单
SpringBoot构建电商基础秒杀项目 学习笔记 新建表 create table if not exists order_info ( id varchar(32) not null defaul ...
- Visual Studio 2017 and Swagger: Building and Documenting Web APIs
Swagger是一种与技术无关的标准,允许发现REST API,为任何软件提供了一种识别REST API功能的方法. 这比看起来更重要:这是一个改变游戏技术的方式,就像Web服务描述语言一样WSDL( ...
- gym-10135I
题意:和H差不多,这个是找字符串中最长的镜像字串: 思路:一样的思路,标记下: #include<iostream> #include<algorithm> #include& ...
- Civil 3D CustomDraw .NET混合项目设置
样例文件中的CustomDraw项目使用的是COM API,但COM API不完整,某些时候需要使用.NET API,此时需要将C++项目设置成"公共语言运行时支持(/clr)"但 ...
- PHP——emjoin表情存入数据库
前言 还有一种解决的方法是更改数据库,这里就不写了,这里直接对emoji进行转码 代码 mb_strlen() | strlen() | rawurlencode() | rawurldecode() ...
- P1130 红牌
题目描述 某地临时居民想获得长期居住权就必须申请拿到红牌.获得红牌的过程是相当复杂 ,一共包括NN个步骤.每一步骤都由政府的某个工作人员负责检查你所提交的材料是否符合条件.为了加快进程,每一步政府都派 ...