[Ynoi2015] 我回来了 题解

\(NOIP\) 考前祈福。

实际上,每种伤害 \(d\) 打出的亵渎次数可以转化为:

\[1+\max\limits_{i=0}^{\lceil\frac{n}{d}\rceil}(i[\sum\limits_{j=1}^{i}[sum(jd-d+1,jd)>0]=i]) \]

其中 \(sum(i,j)\) 表示血量为 \([i,j]\) 这个区间的随从数量。

容易想到记录每种伤害 \(d\) 最早亵渎 \(x+1\) 次时的位置 \(g_{d,x}\)。设 \(a_i\) 表示第一个血量为 \(i\) 的随从出现的时间,则有:

\[g_{d,x}=\max\limits_{i=1}^x(\min\limits_{j=id-i+1}^{id}a_j) \]

括号内的部分直接用 \(ST\) 表简单维护,于是轻松求解。

由于总的区间段数为 \(\sum\limits_{i=1}^n\lceil\frac{n}{i}\rceil\),与 \(n\log n\) 同级,所以枚举区间段数的时间复杂度为 \(O(n\log n)\)

考虑一句废话:当亵渎次数增加 \(1\) 时,包含该伤害的询问答案也加 \(1\)

于是建立树状数组,统计现在每种伤害能打出的亵渎次数,询问时区间求值即可。

离线,时间复杂度 \(O(n\log^2n)\)

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int M=1e6+5;
int n,m,c[M],opt[M],a[N];
int lq[M],rq[M],st[N][20];
vector<int>ad[M];
void add(int x,int y){for(;x<=m;x+=x&-x) c[x]+=y;
}int sum(int x){int re=0;for(;x;x-=x&-x) re+=c[x];return re; 
}void get_ST(){for(int i=1;i<=n;i++) st[i][0]=a[i];for(int i=0;i<19;i++)for(int j=1;j+(1<<(i+1))-1<=n;j++)st[j][i+1]=min(st[j][i],st[j+(1<<i)][i]);
}int rmq(int l,int r){int k=log2(r-l+1),x=r-(1<<k)+1;return min(st[l][k],st[x][k]);
}int main(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>m;for(int i=1;i<=n;i++) a[i]=m+1;for(int i=1;i<=m;i++){cin>>opt[i];if(opt[i]==1){int h;cin>>h;if(a[h]>m) a[h]=i;}else cin>>lq[i]>>rq[i];}get_ST();for(int i=1;i<=n;i++)for(int j=1,t=0;j<=n;j+=i)t=max(t,rmq(j,min(j+i-1,n))),ad[t].push_back(i);for(int i=1;i<=n;i++) add(i,1);for(int i=1;i<=m;i++){for(auto x:ad[i]) add(x,1);if(opt[i]==1) continue;cout<<sum(rq[i])-sum(lq[i]-1)<<"\n";}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/843540.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ADF - [01] 概述

题记部分 001 || 简介Azure Data Factory (ADF) 是微软 Azure 云平台提供的一种数据集成服务,它允许用户创建、安排和管理数据管道,以实现从不同来源抽取数据、转换数据并加载到目标存储的过程。这个过程通常被称为 ETL(Extract, Transform, Load)。002 || 适用场景 【1】…

使用Powershell运行脚本报错的处理方法

最近在一台办公电脑上运行powershell脚本时报错如下: 系统上禁止运行脚本。有关详细信息,请参阅 https :/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + .\CreateFolders.ps1 + ~~~~~~~~~~~~~~~~~~~ + CategoryInfo : S…

20222408 2021-2022-2 《网络与系统攻防技术》实验七实验报告

1.实验内容 1.1实验内容简述 (1)应用SET工具建立冒名网站。 (2)利用ettercap完成DNS欺骗攻击。 (3)结合应用两种技术,使被攻击者会通过域名访问到冒名网站。 (4)结合攻击过程,提出具体防范方法。 1.2学习内容简述 (1)学习SET工具和ettercap工具的使用。 (2)理解A…

Vulnhub sick0s1.1

0x01:端口扫描 主机发现 nmap -sn 192.168.231.0/24全端口扫描 nmap --min-rate 10000 -p- 192.168.231.14122ssh,3128squid-http,但8080http是关闭的Squid 是一个高性能的开源代理服务器软件,它支持多种协议,包括 HTTP、HTTPS、FTP 等。它通常用于以下几种用途: 1、Web代…

Gemini

Gemini: 大规模DNN芯片阵列加速器的布局和架构 摘要 chiplet概要目标Chiplet(芯片阵列)技术允许在单一加速器上集成不断增加的晶体管的数量,在前摩尔定律时代获得了更高的效果,体现了在快速AI迭代进步中需要的大量算力。 但是,这样也引进了更高昂的大包开销,以及大量的d2…

hhdb数据库介绍(10-19)

监控 智能物理拓扑 物理拓扑图主要以服务器为视角展示集群组件与服务器的所属关系,同时可查看服务器资源的使用情况以及各集群组件服务运行状态。使用前需保证为集群服务器配置了可用的SSH连接信息,否则只能查看当前服务器与集群组件的所属关系,无法查看服务器与组件程序的状…

IDEA 2024.3 安装激活教程(至2099年)

IntelliJ IDEA简介 IntelliJ IDEA是一款非常强大的Java集成开发环境(IDE),由JetBrains公司开发。它提供了丰富的功能和工具,帮助开发者更高效地编写、调试和部署代码。 要求 在开始之前,请确保您的计算机满足以下系统要求:操作系统:Windows、macOS或Linux 处理器:至少1 GH…

证书安装后为什么还显示证书无效

在数字化时代,网络安全和数据保护变得尤为重要。SSL/TLS证书作为保护网站和用户数据安全的重要工具,其正确安装和有效性是网站运营者必须关注的问题。然而,有时候即使证书已经安装,用户仍然会遇到“证书无效”的提示,这可能由多种原因引起。本文将探讨在证书安装后,为何用…

windows下netstat及网络查看工具的使用

1.打开cmd: win+R 输入cmd 2.查看工具相关指令可以看到相关指令能配置查看的内容 3.查看相应内容 例如我想查看当前主机UDP协议所使用的端口: netstat -ano -p UDP同理查看TCP所使用的端口: netstat -ano -p TCP二、windows 自带的网络监视工具的使用 1.打开资源管理器 快捷键…

CTP行情和交易接口的初始化流程

目录行情接口初始化交易接口初始化行情接口初始化mdapi->Init(); 初始化行情接口的工作线程初始化之后,线程自动启动,并使用注册的地址向服务端请求建立连接。综合交易平台接口都有独立的工作线程如果开发者在进行可视化程序的开发,请务必注意线程冲突的问题。api启动,I…

数字电子技术的课设,交通灯倒计时

想知道这个要怎么实现30,5,20的倒计时,这个只能实现,20,5,10的,请问要怎么修改,谢谢

C++下的gRPC与protobuf使用和介绍

目录gRPC允许定义四类服务方法流是会结束的stream(流式传输)编写流程客户端使用 ClientReader客户端使用 ClientWriter客户端使用 ClientReaderWriter服务器端gRPC允许定义四类服务方法一元RPC:客户端发送一次请求,等待服务端响应结构,会话结束,就像一次普通的函数调用这…