题解-Bombs

前置知识:

线段树


\(\color{orange}{\texttt{Bombs on luogu}}\) / \(\color{orange}{\texttt{Bombs on CF}}\)

有一个 \(n\) 的排列 \(p_i\)。其中有一些 \(i\) 被打了标记。对于 \(i=1\to n\),将 \(p_i\) 放入集合,如果 \(i\) 被标记,就删除集合中的最大数。最后剩下的集合的最大数就是这种标记状态下该序列的值。给定另一个 \(n\) 的排列 \(q_j\),求对于 \(j=1\to n\),将 \(q_1\sim q_j\) 标记后对应的序列值

数据范围:\(1\le n\le 3\times 10^5\)。


考虑当前序列值为 \(p_i\),如果打上标记 \(q_j\) 后的序列值变化。

  1. 如果 \(q_j<i\):序列值不改变。
  2. 如果 \(q_j\ge i\):序列值变小

所以打上标记 \(q_j\) 相当于破坏 \(1\sim q_j\) 的最大值

可以把打标记 \(q_j\) 变化为令 \([1,q_j]\) 的 \(w\) 区间值 \(-1\)。

而将当前序列值 \(p_i\) 退让成 \(p_k=p_i-1\) 则相当于树立 \(1\sim k\) 的最大值

可以把退让序列值变化为令 \([1,k]\) 的 \(w\) 区间值 \(+1\)。

这样的话如果有 \(w_i>0\) 就说明当前序列值未被删除,否则就该退让最大值


因为要看是否满足有 \(w_i>0\),所以可以线段树维护 \(w\) 区间最大值

Code

#include <bits/stdc++.h>
using namespace std; //&Start
#define re register
#define il inline
#define inf 0x3f3f3f3f
typedef long long lng; //&Data
#define N 300000
int n,p[N+10],q[N+10],I[N+10]; //&Segmenttree
struct smt{ //线段树
int mx[N<<2|7],mk[N<<2|7];
il void pushdown(re int k){
if(mk[k]!=0) mx[k<<1]+=mk[k],mx[k<<1|1]+=mk[k],mk[k<<1]+=mk[k],mk[k<<1|1]+=mk[k],mk[k]=0;
}
il void add(re int x,re int y,re int z,re int k=1,re int l=1,re int r=n){
if(x<=l&&r<=y){mx[k]+=z,mk[k]+=z;return;}
int mid=(l+r)>>1; pushdown(k);
if(mid>=x) add(x,y,z,k<<1,l,mid);if(mid<y) add(x,y,z,k<<1|1,mid+1,r);
mx[k]=max(mx[k<<1],mx[k<<1|1]);
}
}tree; //&Main
int main(){
scanf("%d",&n);
for(re int i=1;i<=n;i++) scanf("%d",p+i),I[p[i]]=i; //记录pk对应的k,方便退让
for(re int i=1;i<=n;i++) scanf("%d",q+i);
re int res=n;
tree.add(1,I[res],1),printf("%d%c",res,"\n "[1<n]);
for(re int i=1;i<n;i++){
tree.add(1,q[i],-1); //打标记-删除
while(tree.mx[1]<=0) tree.add(1,I[--res],1);//退让知道未被删除
printf("%d%c",res,"\n "[i<n-1]); //未被删除的序列值
}
return 0;
}

祝大家学习愉快!

题解-Bombs的更多相关文章

  1. codechef Little Elephant and Bombs题解

    The Little Elephant from the Zoo of Lviv currently is on the military mission. There are N enemy bui ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

随机推荐

  1. Makefile 指定源文件目录 make

    top=$(CURDIR) SRC_DIR=$(top)/src BUILD_DIR=$(SRC_DIR) src=$(wildcard $(SRC_DIR)/*.c) obj=$(patsubst ...

  2. python <12> socket 编程

    1.socket编程需要两个部分 服务器与客户端我们的python中调用 socket包就不需要自己写协议了(socket编程中windows 与Linux中的效果是完全不相同了,次代码最好是放在Li ...

  3. 从ceph对象中提取RBD中的指定文件

    前言 之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文件很小,可能在fs层进行了合并,应 ...

  4. 12.java设计模式之代理模式

    基本介绍: 代理模式(Proxy)为一个对象提供一个替身,以控制对这个对象的访问.即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能,想在 ...

  5. .NET 开源工作流: Slickflow流程引擎高级开发(八) -- 审批网关(ApprovalOrSplit)模式的应用

    前言:业务流程流转过程中,审批类型的节点是比较常见的,在审批操作中,常见的操作就是就是主管人员对待办事项进行同意或者拒绝.所以网关处理节点,就是需要对这两种审批结果进行预备处理,审批网关是在或分支(O ...

  6. rkhunter

    0 0 * * 0 /usr/local/bin/rkhunter -c --cronjob 定时工具

  7. MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed

    问题一 Table xx is marked as crashed and last (automatic?) repair failed 有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL ...

  8. 怎么用CDR来批量导出图片

    我们通过CorelDRAW上方菜单栏"布局"中的"插入页面"可以创建多个页面,同时编辑,适合比如书籍排版,杂志排版等等这些需要进行多页面编辑的工作. 图1:CD ...

  9. Android source code compile error: “Try increasing heap size with java option '-Xmx<size>'”

    export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g" ./pr ...

  10. idea2020安装破解教程

    申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用 不花钱 的方式 IDEA 2020.2 激活到 2089 年 idea官网下载安装包:https:/ ...