解:考场上爆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的树(权限题)的更多相关文章

  1. 洛谷 U96762 小R与三角形 题解

    U96762 小R与三角形 原题链接 题目描述 小 R 所在的小镇有 n 个村落,这 n 个村落分布在一个圆周上,这些村落之间两两有直达的小路,小路可能相交,但不存在三条路交于一点.现在小 R 正好放 ...

  2. [AHOI 2009] 维护序列(线段树模板题)

    1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec  Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...

  3. 【codevs2370】小机房的树 LCA 倍增

    2370 小机房的树  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0 ...

  4. Dynamic Rankings || 动态/静态区间第k小(主席树)

    JYF大佬说,一星期要写很多篇博客才会有人看 但是我做题没有那么快啊QwQ Part1 写在前面 区间第K小问题一直是主席树经典题=w=今天的重点是动态区间第K小问题.静态问题要求查询一个区间内的第k ...

  5. 【LOJ6062】「2017 山东一轮集训 Day2」Pair(线段树套路题)

    点此看题面 大致题意: 给出一个长度为\(n\)的数列\(a\)和一个长度为\(m\)的数列\(b\),求\(a\)有多少个长度为\(m\)的子串与\(b\)匹配.数列匹配指存在一种方案使两个数列中的 ...

  6. [poj2104]可持久化线段树入门题(主席树)

    解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序 ...

  7. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  8. HDU 2096 小明A+B --- 水题

    HDU 2096 /* HDU 2096 小明A+B --- 水题 */ #include <cstdio> int main() { #ifdef _LOCAL freopen(&quo ...

  9. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

随机推荐

  1. vue 动态插入组件

    HTML代码: <div id="app"> <p>{{ message }}</p> <button @click="add( ...

  2. Granfana+PostgreSQL

    建表: create table pdm_log( id serial primary key, date_time timestamp with time zone DEFAULT CURRENT_ ...

  3. RDD特性

  4. mysql 清除大数据表单

    背景:mysql数据库中有个日志表记录高达800多万,影响了mysql的正常业务访问,现需要清理三个月之前的所有数据,大概600多万(大概13G) 方法一:传统delete from xxx,传统,普 ...

  5. mysql运行sql文件出错

    从服务器上备份表数据到本地,使用的工具是Navicat,右键表转储sql文件,但是在本地运行sql文件时一直报异常 [Err] 1064 - You have an error in your SQL ...

  6. Installing Office Online Server for SharePoint 2016

    Office Online Server is the next version of the Office Web Apps, which allows your users to view and ...

  7. 自定义 ASP.NET Identity Data Model with EF

    One of the first issues you will likely encounter when getting started with ASP.NET Identity centers ...

  8. servlet篇 之 servlet概念及其功能实现

    Servlet概念: 在JavaWeb中,把那些可以使用浏览器通过url的形式来访问的java类,叫做servlet. servlet就是java类中的一种,只不过这种java类有一个特殊的功能,就是 ...

  9. Spring 使用介绍(一)—— 概述

    一.Spring设计原则 1.约定大于配置的契约式编程 2.非侵入式设计 从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计 3.面向接 ...

  10. 基于网络编程 TCP协议 及 socket 基本语法

    socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面, ...