codeforces 1326 E.Bombs

2023-05-16

codeforces 1326 E.Bombs

题意:

给定 [ 1 , n ] [1,n] [1,n]的排列p,q,将 p i p_i pi依次加入初始为空的集合S q i q_i qi的值表示第i次加入的值为bomb。若加入的是bomb就把当前集合最大值从集合中移出(先加再移出)。现在规定对于每一个i q 1 . . . q i − 1 q_1...q_{i-1} q1...qi1都是bomb。求对于每一个 i ∈ [ 1 , n ] i∈[1,n] i[1,n]每次操作后集合中的最大值。

题解:

  1. 首先bomb越多,最大值一定不会变的更大,所以该序列一定为非递增序列。
  2. 用线段树维护一下每个节点右侧炸弹的个数 - 右侧大于 x 的数的个数 ,显然对于每个节点而言,如果这个值大于等于 0 的话,那么 x + 1 及以上的答案是肯定不可能的,因为全都被炸弹炸没了,我们就可以用一个 while 维护符合条件的答案了,又因为我们需要所有的答案都大于等于 0 时才满足条件,所以我们只需要维护一下区间最小值就好了,最小值如果大于等于 0 的话,那么就说明所有节点都满足这个条件了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
const int N = 3e5 + 100;
int pos[N];
struct Node{
    int l, r, mmin, lazy;
} tree[N << 2];

void build(int k, int l, int r){
    tree[k].l = l;
    tree[k].r = r;
    tree[k].lazy = tree[k].mmin = 0;
    if (l == r)
        return;
    int mid = l + r >> 1;
    build(k << 1, l, mid);
    build(k << 1 | 1, mid + 1, r);
}

void pushdown(int k){
	if(tree[k].lazy){
        int lz = tree[k].lazy;
        tree[k].lazy = 0;
        tree[k << 1].mmin += lz;
        tree[k << 1].lazy += lz;
        tree[k << 1 | 1].mmin += lz;
        tree[k << 1 | 1].lazy += lz;
    }
}

void pushup(int k){
    tree[k].mmin = min(tree[k << 1].mmin, tree[k << 1 | 1].mmin);
}

void update(int k, int l, int r, int val){
    if(tree[k].l > r || tree[k].r < l)
        return;
	if(tree[k].l >= l&&tree[k].r <= r){
        tree[k].mmin += val;
        tree[k].lazy += val;
        return;
    }
    pushdown(k);
    update(k << 1, l, r, val);
    update(k << 1 | 1, l, r, val);
    pushup(k);
}

int main(){
	ios_base::sync_with_stdio(false);
	int n;cin >> n;
    build(1, 1, n);
    for (int i = 1; i <= n; i++){
		int num;cin >> num;
        pos[num] = i;
    }
    int ans = n + 1;
    for (int i = 1; i <= n; i++){
		int q; cin >> q;
		while(tree[1].mmin >= 0){
            ans--;
            update(1, 1, pos[ans], -1);
        }
        cout << ans << " ";
        update(1, 1, q, 1);
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

codeforces 1326 E.Bombs 的相关文章

随机推荐

  • 容器通信之跨链接通信

    前言 同一主机下搭建容器应用栈的环境 xff0c 只需要完成容器互联来实现容器间的通信即可 xff0c 这里采用docker run link选项建立容器间的互联关系 docker官方已不推荐使用docker run link来链接2个容器
  • Linux进程间通信

    1 unix域套接字 域套接字 xff1a 1 只能用于同一设备上不同进程之间的通信 xff1b 2 效率高于网络套接字 域套接字仅仅是复制数据 xff0c 并不走协议栈 xff1b 3 可靠 xff0c 全双工 xff1b 2 IP套接字
  • 什么是API

    1 什么是API API是Application Programming Interface xff08 应用程序接口 xff09 的缩写 是一些预先定义的函数 xff0c 目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力
  • FreeRTOS(二)任务基础知识

    一 前后台系统与RTOS 前后台系统 61 死循环 xff08 通常为1个 xff09 43 中断服务程序 xff08 通常为若干个 xff09 应用程序是一个无限循环 xff0c 循环中调用 API 函数完成所需的操作 xff0c 这个大
  • SBUS协议(20200210)

    最近看到很多sbus协议 xff0c 就专门搜集了一些资料学习一下 1 介绍 SBUS是一个接收机串行总线输出 xff0c 通过这根总线 xff0c 可以获得遥控器上所有通道的数据 目前很多模型及无人机电子设备都支持SBUS总线的接入 使用
  • 【openmv专题】串口通信

    这篇文章主要讲述openmv串口通信过程中会出现错位 xff0c 因缓存空间不足带来的串口报错问题 xff0c 直接进入正题 xff1a 串口通信有同步和异步之分 xff0c 而openmv用的是异步通信 xff0c 需要有缓存区 xff0
  • FreeRTOS任务上下文切换与任务状态切换的区别及联系

    FreeRTOS 中的任务上下文切换和任务状态切换是两个不同的概念 1 任务状态切换是指任务从一种状态切换到另一种状态 FreeRTOS 中的任务状态包括就绪态 阻塞态和运行态 当任务从就绪态切换到运行态时 xff0c 任务开始执行 xff
  • XGBOD:用无监督表示学习改进有监督离群点检测

    XGBOD Improving Supervised Outlier Detection with Unsupervised Representation Learning 论文链接 xff1a https www andrew cmu e
  • 小觅S系列相机运行vins-mono(轨迹飘飞解决版)

    小觅S系列相机运行vins mono xff08 轨迹飘飞解决版 xff09 1 SDK驱动2 获得相机标定数据3 下载MYNT EYE VINS Sample4 运行 前期准备 xff1a 安装并成功运行VINS MONO 1 SDK驱动
  • 嵌入式第0部分:嵌入式工程师完全学习指南

    一 什么是嵌入式 xff08 一 xff09 定义 xff1a 传统定义 xff08 狭义嵌入式 xff09 xff1a 嵌入式系统是以应用为中心 xff0c 以计算机技术为基础 xff0c 并且软硬件课裁剪 xff0c 适用于应用系统对功
  • 【SLAM 十四讲】---第七讲、视觉里程计

    第七讲 视觉里程计
  • Vscode配置git

    1 Git介绍和安装 Git是什么 Git是目前世界上最先进的分布式版本控制系统 xff08 没有之一 xff09 简单来说 它是控制项目版本的一个工具 我们可以利用Git进行多人协作和代码备份等工作 下载git xff08 64bit w
  • Xshell连接虚拟机Ubantu失败解决办法(主机和虚拟机能够互ping的前提)

    主机和虚拟机互ping 在主机命令行里输入ipconfig指令 xff0c 查询主机ip地址 xff0c 在虚拟机Ubantu终端里输入ping 主机ip地址 xff0c ping通后 xff0c 按ctrl 43 c停止 在虚拟机Uban
  • windows 11系统安装

    安装前注意事项 1 准备8G或8G以上U盘 xff08 32G以内 xff09 2 安装系统前备份好个人需要数据 xff08 制作U盘会格式化U盘 xff0c U盘内的重要文件也要事先备份好 xff09 3 预装office的务必记住自己激
  • docker 权限问题 Got permission denied while trying to connect to the Docker daemon socket at

    一 前言 docker安装完成 xff0c 一般用户没有权限启动docker服务 xff0c 只能通过sudo来通过root用户权限来启动docker xff0c 此时对于一般用户而言 xff0c 需要执行docker ps或者docker
  • Neo4j(七)——创建新数据库(如何在Neo4j中创建新数据库)

    方法一 xff1a 找到neo4j安装目录 xff0c 编辑conf文件夹中的neo4j conf 找到dbms active database 61 xff0c 将下图中的graph db用其他名称替换 xff0c 并解除注释 xff08
  • python VScode使用gitlab简单使用流程

    一 下载安装软件 1 安装好vscode xff0c 如未安装 xff0c 下载并且安装 https code visualstudio com Download 2 安装git windows客户端 https git scm com d
  • keil5工程函数无法跳转到函数定义解决方法

    问题描述 在使用keil查看工程代码时 xff0c 进行函数的跳转 xff0c 跳转不成功并提示以下错误 这是因为在编译工程的时候少勾选了一个选项 xff0c 按下以下方式勾选上然后重新Rebuild一下工程就好了
  • Codeforces D. Prefix-Suffix Palindrome

    Codeforces D Prefix Suffix Palindrome 题解 xff1a 和D1相同 xff0c 区别是找中间的回文串要压缩时间 xff0c 用到了马拉车算法 xff08 算法介绍在下面 xff1a span class
  • codeforces 1326 E.Bombs

    codeforces 1326 E Bombs 题意 xff1a 给定 1 n 1 n 1 n 的排列p q xff0c 将