题目链接
题目大意:
一个序列p和一个序列q。按p1p2…pn将炸弹放到第1,2,…n的位置之上,每个炸弹都有一个值,然后q的序列是表示当前qi的位置上已经存在炸弹,如果已经存在炸弹,就把当前已经放的(包括正在放的)中的最大值移除,最后输出剩余的炸弹中的最大值。对每个qi的前缀都要询问一下。
解题思路:
很容易就看到因为前缀越长则删除的个数越多所以答案肯定是非递增。
按照题解思路,假设当前答案为x-1,则≥x的所有的炸弹都要被清除掉,一个炸弹需要被清除掉则需要有一个qi≥当前的位置。所以假设一个数组b,b[i]表示[i…n]这个后缀中≥x的个数- [i…,n]中的已经存在炸弹数,在所有的b[i]都≤0的时候就说明≥x的炸弹都被清除掉了。这用线段树的最大值维护查询t[1]就行了。
然后首先把[1…pos[n]]插入线段树,然后每次碰到一个q[i]就把[1…q[i]]的值都-1,如果当前的t[1]>0则说明当前值没有被全部清除直接输出就行了,否则就将答案ans–,每次递减后将[1…pos[ans]]的值+1,直到t[1]>0就说明≥ans的炸弹没有被全部清除,那就是答案了。

#include<bits/stdc++.h>
using namespace std;
mt19937 rng_32(chrono::steady_clock::now().time_since_epoch().count());
typedef long long ll;
const int maxn=3e5+10;
int t[maxn<<2],lz[maxn<<2];
void pushup(int i)
{t[i]=max(t[i<<1],t[i<<1|1]);
}
void pushdown(int i)
{if (lz[i]){t[i<<1]+=lz[i];lz[i<<1]+=lz[i];t[i<<1|1]+=lz[i];lz[i<<1|1]+=lz[i];lz[i]=0;}
}
void update(int l,int r,int i,int ql,int qr,int add)
{if (ql<=l && qr>=r){t[i]+=add;lz[i]+=add;return ;}pushdown(i);int mid=(l+r)>>1;if (ql<=mid)update(l,mid,i<<1,ql,qr,add);if (qr>mid)update(mid+1,r,i<<1|1,ql,qr,add);pushup(i);
}
int a[maxn],b[maxn];
int pos[maxn];
int main()
{int n;cin>>n;for (int i=1;i<=n;i++){cin>>a[i];pos[a[i]]=i;}for (int i=1;i<=n;i++)cin>>b[i];int ans=n;update(1,n,1,1,pos[n],1);cout<<n<<" ";for(int i=1;i<n;i++){update(1,n,1,1,b[i],-1);if (t[1]>0){cout<<ans<<" ";}else{while (t[1]<=0){ans--;update(1,n,1,1,pos[ans],1);}cout<<ans<<" ";}}return 0;
}

Codeforces 1326 E. Bombs (线段树)相关推荐

  1. codeforces 1326 E.Bombs

    codeforces 1326 E.Bombs 题意: 给定[1,n][1,n][1,n]的排列p,q,将pip_ipi​依次加入初始为空的集合S,qiq_iqi​的值表示第i次加入的值为bomb.若 ...

  2. CodeForces - 1326E Bombs(线段树+思维)

    题目链接:点击查看 题目大意:给出一个 n 的排列记为 p[ i ] ,现在有一个初始时为空的集合A,对于每个 i 遍历 1 ~ n ,每次的操作如下: 向集合中添加 p[ i ] 如果位置 i 有炸 ...

  3. Codeforces 833B 题解(DP+线段树)

    题面 传送门:http://codeforces.com/problemset/problem/833/B B. The Bakery time limit per test2.5 seconds m ...

  4. Codeforces 997E Good Subsegments (线段树)

    题目链接 https://codeforces.com/contest/997/problem/E 题解 经典题,鸽了 159 天终于看明白题解了.. 考虑一个区间是连续的等价于这个区间内的 \((\ ...

  5. CodeForces - 1539F Strange Array(线段树区间合并)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,规定位置 iii 的贡献是:设 x=a[i]x=a[i]x=a[i],选择一个包含 iii 的区间 [l,r][l,r][l,r],将其中 ...

  6. CodeForces - 1430E String Reversal(线段树+模拟)

    题目链接:点击查看 题目大意:给出一个字符串 sss ,令其反转的串为 ttt ,每次操作可以将 ttt 中的两个相邻位置的字符交换,问最少需要进行多少次操作才能使得 ttt 变成 sss 题目分析: ...

  7. 【codeforces 12D】【线段树】【降维】【离散化】【三元组比较大小】

    [题意] 给出n个女士的三位属性xi,yi,zi(注意此处是一行x给完再给y再给z).若存在xi>xj && yi > yj  && zi>zj ,那 ...

  8. Codeforces 1108 E2(线段树+思维)

    传送们 题意: 给你一个长度为nnn的数列bbb.以及mmm个区间. 你可以选取111个或多个这样的区间aia_iai​,使得令区间aia_iai​所对应的所有值bib_ibi​都减111.你最终要使 ...

  9. CodeForces - 817F MEX Queries(线段树lazy序)

    题目链接:点击查看 题目大意:初始时有一个空的集合,需要执行 n 次操作: 1 l r:将区间 [ l , r ] 内未出现的数加入到集合中 2 l r:将区间 [ l , r ] 内出现的数字全部删 ...

最新文章

  1. visual studio无法更新_微软发布 VS Code Python 四月更新
  2. Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转
  3. 每日程序C语言49-猴子分桃子问题
  4. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体
  5. 04.local_gateway和network相关设置
  6. springboot分页展示功能_基于SpringBoot从零构建博客网站 - 分页显示文章列表功能...
  7. android减少动态效果,【技巧】手机运行变慢?试试这些办法!
  8. 社区团长资金分账该如何高效解决呢?
  9. 切换计算机管理员身份,管理员身份运行,教您如何设置以管理员身份运行程序...
  10. 微信小程序组件之间的传值
  11. 计算机软件工程课程设计感想,软件课程设计心得体会.docx
  12. cesium实现飞线特效
  13. 微信公众平台——用户管理
  14. 【网络篇】TCP SYN Flood Attack(洪水攻击)
  15. 如何合并pdf文件?多pdf文件合并技能分享
  16. 开发软件是否等于写程序?
  17. 论文阅读——Towards Adversarial Retinal Image Synthesis
  18. java毕业设计闲一品交易平台mybatis+源码+调试部署+系统+数据库+lw
  19. 《查看Linux系统版本以及VMWARE快照》
  20. 基于java技术的装潢公司网站开发计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

热门文章

  1. @Configuration注解 -【Spring底层原理】
  2. PPT形状的多种玩法
  3. 淘宝店铺装修教程之下载淘宝视频及分析视频地址中的高逼格信息
  4. 软件工程中五种常用的软件开发模型整理
  5. Linux(信号,进程间通信)共享内存,信号量,消息队列
  6. 树莓派4接7寸液晶屏竖屏设置
  7. Java大用处——动态数组的实现
  8. excel自动筛选_在Excel 2007中按选择自动筛选
  9. GUID MBR新一代分区表 DiskGenius
  10. python 的 return 详解