题解-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. 设计模式之工厂模式(Factory模式)

    在面向对象系统设计中经常遇到以下两类问题: 1)为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的 ...

  2. PyQt5播放实时视频流或本地视频文件

    目录 编辑UI 新建视频播放类Display 打开相机 关闭相机 显示视频画面 完整源代码 效果图 编辑UI 编辑UI如下图所示: 新建视频播放类Display 定义如下初始化函数 def __ini ...

  3. Abbott的复仇(Abbott's Revenge)

    题目:有一个最多包含9*9个交叉点的迷宫.输入起点.离开起点时的朝向和终点,求一条最短路(多解时任意输出一个即可). 这个迷宫的特殊之处在于:进入一个交叉点的方向(用NEWS这4个字母分别表示北东西南 ...

  4. 「NOIP2016」天天爱跑步 题解

    (声明:图片来源于网络) 「NOIP2016」天天爱跑步 题解 题目TP门 题目 题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是 ...

  5. rsync未授权访问漏洞复现

    rsync未授权访问漏洞简介 rsync是Linux/Unix下的一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件和目录,默认运行在873端口.由于配置不当,导致任何人可未授权访问r ...

  6. 转换文件格式遭遇 FileNotFoundError:[WinError 2]系统找不到指定的文件

    重启试试

  7. P5665 划分

    Part 1 先来看一个错误的贪心做法:假设当前结尾的一段和为 \(a\),等待加入结尾的一段和为 \(b\),现在要处理新进来的数 \(c\). \(a\leq b\),将 \(a\) 算入答案,将 ...

  8. 【P4211 LNOI2014】LCA——树链剖分 +询问离线

    (7.16晚)更完先在B站颓一会儿-- --------------------------------------------------------------- (以下为luogu题面) 题目描 ...

  9. java抽象类,多态1

    1 package pet_2; 2 3 public abstract class Pet { 4 private String name; 5 6 public String getName() ...

  10. mfc 位图本地存储 本地位图读取显示

    一.读取CImage //在绘图函数中直接使用参数pDC,无需定义 CDC* pDC = GetDC(): //读去位图路径,根据实际情况修改 CString loatImagePath = TEXT ...