当前位置: 首页 > news >正文

【Luogu】 P5445 [APIO2019] 路灯

题目链接

点击打开链接

题目解法

转化很妙

考虑关路灯 x x x 的操作
令左边第一个未关的路灯为 L L L,右边第一个未关的路灯为 R R R,那么这一次会影响的区间即为 l ∈ [ L + 1 , x ] , r ∈ [ x , R − 1 ] l\in[L+1,x],\;r\in[x,R-1] l[L+1,x],r[x,R1],既然有 2 个限制,那么我们把限制变成二维平面上的矩阵,即把左上为 ( L + 1 , x ) (L+1,x) (L+1,x),右下为 ( x , R − 1 ) (x,R-1) (x,R1) 的矩阵变为 0
开路灯的操作类似

考虑询问的是什么?
1 1 1 q − 1 q-1 q1 次每个版本 ( x , y ) (x,y) (x,y) 位置的和
考虑给矩阵定义一个增加(或减少)值,使查询变成只要查询第 i i i 个版本的 ( x , y ) (x,y) (x,y)
这里直接给出:对于第 i i i 个操作,加上或减去值为 i − q i-q iq
考虑先开路灯,再关路灯的操作,即为 T − i − ( T − j ) = j − i T-i-(T-j)=j-i Ti(Tj)=ji,恰好为答案,这可以拓展到多个开关路灯的操作
这里需要一个特判,如果查询第 i i i 个版本从 x x x 可以到 y y y,那么答案需要 − ( q − i ) -(q-i) (qi)

可以把矩形变成 4 个区域的加减,然后不难发现,这就是一个三维偏序,可以考虑离线 c d q cdq cdq
时间复杂度 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)

#include <bits/stdc++.h>
#define lowbit(x) x&-x
using namespace std;
const int N=300100;
struct Node{ int x1,x2,v,op,id;}q[N*10],t[N*10];
int idx,n,m,state[N],ans[N],tr[N];
char str[N];
set<int> se;
inline int read(){int FF=0,RR=1;char ch=getchar();for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;return FF*RR;
}
void ADD(int x,int y,int v){ q[++idx]={x,y,v,0,0};}
void add_square(int x1,int x2,int y1,int y2,int v){ADD(x2,y2,v);if(x1>1) ADD(x1-1,y2,-v);if(y1>1) ADD(x2,y1-1,-v);if(x1>1&&y1>1) ADD(x1-1,y1-1,v);
}
void work(int x,int t){if(!state[x]){auto it=se.upper_bound(x);int R=*it,L=*(--it);se.insert(x);add_square(L+1,x,x,R-1,-(m-t));}else{se.erase(x);auto it=se.upper_bound(x);int R=*it,L=*(--it);add_square(L+1,x,x,R-1,m-t);}
}
void add(int x,int y){ for(;x<=n;x+=lowbit(x)) tr[x]+=y;}
int ask(int x){if(!x) return 0;int res=0;for(;x;x-=lowbit(x)) res+=tr[x];return res;
}
void cdq(int l,int r){if(l==r) return;int mid=(l+r)>>1;cdq(l,mid),cdq(mid+1,r);int i=l,j=mid+1,k=0;while(i<=mid||j<=r){if(j>r||(i<=mid&&q[i].x1>=q[j].x1)){if(!q[i].op) add(q[i].x2,q[i].v);t[++k]=q[i],i++;}else{if(q[j].op) ans[q[j].id]+=ask(n)-ask(q[j].x2-1);t[++k]=q[j],j++;}}for(i=l;i<=mid;i++) if(!q[i].op) add(q[i].x2,-q[i].v);for(int i=1,j=l;i<=k;i++,j++) q[j]=t[i];
}
bool con(int x,int y){ return ask(y)-ask(x-1)==y-x+1;}
int main(){n=read(),m=read();scanf("%s",str+1);for(int i=1;i<=n;i++) state[i]=str[i]-48;add_square(1,n,1,n,m);se.insert(0),se.insert(n+1);for(int i=1;i<=n;i++) if(state[i]) add(i,1);for(int i=1;i<=n;i++) if(!state[i]) work(i,0);for(int i=1;i<=m;i++){char op[10];scanf("%s",op);if(op[0]=='t'){int x=read();state[x]^=1,work(x,i);ans[i]=-1e9;if(state[x]) add(x,1);else add(x,-1);}else{int x=read(),y=read();y--;if(con(x,y)) ans[i]=-(m-i);q[++idx]={x,y,0,1,i};}}memset(tr,0,sizeof(tr));cdq(1,idx);for(int i=1;i<=m;i++) if(ans[i]!=-1e9) printf("%d\n",ans[i]);return 0;
}

相关文章:

【Luogu】 P5445 [APIO2019] 路灯

题目链接 点击打开链接 题目解法 转化很妙 考虑关路灯 x x x 的操作 令左边第一个未关的路灯为 L L L&#xff0c;右边第一个未关的路灯为 R R R&#xff0c;那么这一次会影响的区间即为 l ∈ [ L 1 , x ] , r ∈ [ x , R − 1 ] l\in[L1,x],\;r\in[x,R-1] l∈[L1,x],…...

Kafka3.0.0版本——消费者(独立消费者消费某一个主题中某个分区数据案例__订阅分区)

目录 一、独立消费者消费某一个主题中某个分区数据案例1.1、案例需求1.2、案例代码1.3、测试 一、独立消费者消费某一个主题中某个分区数据案例 1.1、案例需求 创建一个独立消费者&#xff0c;消费firstTopic主题 0 号分区的数据&#xff0c;所下图所示&#xff1a; 1.2、案…...

基于Simulink的用于电力系统动态分析

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

日200亿次调用,喜马拉雅网关的架构设计

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;很多小伙伴拿到一线互联网企业如阿里、网易、有赞、希音、百度、滴滴的面试资格。 最近&#xff0c;尼恩指导一个小伙伴简历&#xff0c;写了一个《API网关项目》&#xff0c;此项目帮这个小伙拿到 字节/阿里/微博/…...

构造函数和析构函数(个人学习笔记黑马学习)

构造函数:主要作用在于创建对象时为对象的成员属性赋值&#xff0c;构造函数由编译器自动调用&#xff0c;无须手动调用。析构函数:主要作用在于对象销毁前系统自动调用&#xff0c;执行一些清理工作。 #include <iostream> using namespace std;//对象初始化和清理class…...

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程

详情点击链接&#xff1a;GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程 前沿 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。 如在科研编程、绘图领域&#xff1a; 1、编程建议和示例代码: 无论你使用的编程语言是…...

Git上传新项目

第一步&#xff1a;初始化 Git 仓库 首先&#xff0c;打开终端或命令行界面&#xff0c;然后导航到项目目录。运行下面的命令来初始化一个新的 Git 仓库&#xff1a; git init这将创建一个新的 .git 子目录&#xff0c;其中包含了初始化的 Git 仓库。 第二步&#xff1a;添加…...

C语言文件操作总结

目录 字符方式读入文件 数据块方式读写文件 文件定位与随机读写 文件中数据的修改 字符方式读入文件 1.向文件中写入&#xff08;输入字符&#xff09; 用 fputc 函数或 puts 函数可以把一个字符写到磁盘文件中去。 int fputc(int ch,FILE * fp) ch 是要输出的字符&#…...

原生js之dom如何进行事件监听(事件捕获/冒泡)

那么好,这次主要讲解的就是dom是如何进行事件监听和事件取消监听的,我们知道vue中主要用watch来进行监听. js监听与取消监听 那么原生js主要用到的就是addListenEvent事件来进行监听,可以监听文档dom对象也可以监听浏览器bom对象,监听事件的语法结构如下 Dom/Bom监听 eleme…...

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

BUUCTF-WEB-[ACTF2020 新生赛]Includel

打开靶机 点击tips 利用Burp抓包&#xff0c;未见异常 但发现了响应头是 PHP/7.3.13 想到了"php://input"伪协议POST发送PHP代码 构建Payload&#xff1a;?filephp://filter/readconvert.base64-encode/resourceflag.php 这里需要注意的是使用php://filter伪协议…...

算法通关村十四关:白银挑战-堆能高效解决的经典问题

白银挑战-堆能高效解决的经典问题 1.在数组中找第K大的元素 LeetCode215 https://leetcode.cn/problems/kth-largest-element-in-an-array/ 思路分析 主要解决方法有3个&#xff0c;选择法&#xff0c;堆查找法和快速排序法 方法1&#xff1a;选择法 先遍历一遍找到最大的…...

跨站请求伪造(CSRF)攻击与防御原理

跨站请求伪造&#xff08;CSRF&#xff09; 1.1 CSRF原理 1.1.1 基本概念 跨站请求伪造&#xff08;Cross Site Request Forgery&#xff0c;CSRF&#xff09;是一种攻击&#xff0c;它强制浏览器客户端用户在当前对其进行身份验证后的Web 应用程序上执行非本意操作的攻击&a…...

从0到1实现播放控制器

这系列文章主要讲诉如何从0到1使用QT实现带时间显示、滚动字幕等的自定义配置视频播放控制器。平时我们乘坐地铁经常看到各条线的播放控制器都大同小异。其实都是通过QT等界面开发软件来实现的。 在具体开发之前&#xff0c;需要明确我们需要做什么&#xff1f; 1. 开发一个可…...

【Vue-Element-Admin】导出el-table全部数据

背景 因为el-table实现了分页查询&#xff0c;所以想要实现el-table需要重新编写一个查询全部数据的方法 查询全部数据 listQuery: export default{return{listQuery:{//page:1,//limit:20,//如果想兼容按条件导出&#xff0c;可以定义查询条件age:undefined,sex:undefined…...

MFC 更改控件的大小和位置

获取当前主窗体的位置rect CRect dlgNow;GetWindowRect(&dlgNow);获取某一个控件当前的位置 CRect rect;CButton* pBtn (CButton*)GetDlgItem(IDC_BUTTONXXX);//获取按钮控件pBtn->GetWindowRect(rect);CWnd* pWnd(CWnd*)GetDlgItem(IDC_EDITXXX);//其它控件&#xff0…...

【向量数据库】相似向量检索Faiss数据库的安装及余弦相似度计算(C++)

目录 简介安装方法安装OpenBLAS安装lapack编译Faiss 代码示例余弦相似度计算输出ID号而非索引的改进版 简介 Faiss 是一个强大的向量相似度搜索库&#xff0c;具有以下优点&#xff1a; 高效的搜索性能&#xff1a;Faiss 在处理大规模向量数据时表现出色。它利用了高度优化的索…...

教育培训小程序的设计与功能解析

随着互联网的发展&#xff0c;线上教育逐渐成为一种趋势&#xff0c;越来越多的人开始选择在线学习。而搭建一个适合自己的线上教育小程序&#xff0c;可以为教育机构或个人提供更好的教学和学习体验。在本文中&#xff0c;我们将介绍如何通过一个第三方制作平台来搭建在线教育…...

【ES】illegal_argument_exception“,“reason“:“Result window is too large

查询ES数据返回错误&#xff1a; {"root_cause":[{"type":"illegal_argument_exception","reason":"Result window is too large, from size must be less than or equal to: [10000] but was [999999]. See the scroll api for…...

SpringBoot实现登录拦截

如果我们不进行登录拦截的话&#xff0c;即使我们跳过登录页面直接去访问任意一个页面也能访问成功&#xff0c;那么登录功能就没有意义&#xff0c;同时也会存在安全问题&#xff0c;因为有些操作是要用户登录后才能执行的&#xff0c;如果用户没有登录&#xff0c;该接口就获…...

浅谈泛在电力物联网、能源互联网与虚拟电厂

导读&#xff1a;从能源互联网推进受阻&#xff0c;到泛在电力物联网名噪一时&#xff0c;到虚拟电厂再次走向火爆&#xff0c;能源领域亟需更进一步的数智化发展。如今&#xff0c;随着新型电力系统建设推进&#xff0c;虚拟电厂有望迎来快速发展。除了国网和南网公司下属的电…...

深度学习框架安装与配置指南:PyTorch和TensorFlow详细教程

如何安装和配置深度学习框架PyTorch和TensorFlow 为什么选择PyTorch和TensorFlow&#xff1f;PyTorchTensorFlow安装PyTorch 步骤1&#xff1a;安装Python步骤2&#xff1a;使用pip安装PyTorch 安装TensorFlow 步骤1&#xff1a;安装Python步骤2&#xff1a;使用pip安装TensorF…...

vue中属性执行顺序

vue中属性的执行顺序 在Vue 2中&#xff0c;组件的生命周期和数据绑定的执行顺序如下&#xff1a; data&#xff1a;首先&#xff0c;组件会调用 data 函数&#xff0c;该函数返回一个对象&#xff0c;该对象的属性和方法会被分配给组件的 $data。init&#xff1a;接下来&…...

【代码随想录】Day 50 动态规划11 (买卖股票Ⅲ、Ⅳ)

买卖股票Ⅲ https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/ 无语了。。。 写的很好就是怎么都过不了。。。 还是就用代码随想录的写法吧。。。 class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();vector&…...

PHP反序列化漏洞

一、序列化&#xff0c;反序列化 序列化&#xff1a;将php对象压缩并按照一定格式转换成字符串过程反序列化&#xff1a;从字符串转换回php对象的过程目的&#xff1a;为了方便php对象的传输和存储 seriallize() 传入参数为php对象&#xff0c;序列化成字符串 unseriali…...

容器编排学习(一)k8s集群管理

一 Kubernetes 1 概述 就在Docker容器技术被炒得热火朝天之时&#xff0c;大家发现&#xff0c;如果想要将Docker应用于具体的业务实现&#xff0c;是存在困难的一一编排、管理和调度等各个方面&#xff0c;都不容易。于是&#xff0c;人们迫切需要一套管理系统&#xff0…...

js去除字符串空格的几种方式

方法1&#xff1a;(最常用)全部去除掉空格 var str abc d e f g ; function trim(str) { var reg /[\t\r\f\n\s]*/g; if (typeof str string) { var trimStr str.replace(reg,); } console.lo…...

Spring 自带工具——URI 工具UriComponentsBuilder

UriComponentsBuilder 是 Spring Framework 提供的一个实用工具类&#xff0c;用于构建 URI&#xff08;Uniform Resource Identifier&#xff09;。URI 是用于标识和定位资源的字符串&#xff0c;例如 URL&#xff08;Uniform Resource Locator&#xff09;就是一种特殊的 URI…...

优化案例5:视图目标列改写优化

优化案例5&#xff1a;视图目标列改写优化 1. 问题描述2. 分析过程2.1 目标SQL2.2 解决思路1&#xff09;效率低的执行计划2&#xff09;视图过滤性3&#xff09;查看已有索引定义 2.3 视图改写2.4 增添复合索引 3. 优化总结 DM技术交流QQ群&#xff1a;940124259 1. 问题描述…...

Origin绘制彩色光谱图

成果图 1、双击线条打开如下窗口 2、选择“图案”-》颜色-》按点-》映射-》Wavelength 3、选择颜色映射 4、单击填充-》选择加载调色板-》Rainbow-》确定 5、单击级别&#xff0c;设置成从370到780&#xff0c;右侧增量选择2&#xff08;越小&#xff0c;颜色渐变越细腻&am…...

wordpress ftp 上传到 那个文件夹/冬镜seo

前言 我们知道&#xff0c;在 MVC 应用程序中&#xff0c;有一部分约定的内容。其中关于 Controller 的约定是这样的。 每个 Controller 类的名字以 Controller 结尾&#xff0c;并且放置在 Controllers 目录中。Controller 使用的视图是在 Views 主目录的一个子目录中&#xf…...

160;作者:网站建设&/潍坊百度网站排名

平时我们如果要用到委托一般都是先声明一个委托类型&#xff0c;比如&#xff1a; private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型&#xff0c;委托名Say后面没有参数&#xff0c;说明对应的方法也就没有传入参数。 写一个适用于该委托…...

可以做超链接或锚文本的网站有哪些/怎么联系百度客服

对于cJSON的使用&#xff0c;我主要是用来模拟远程服务器端返回的一个json类型的目录结构&#xff0c;客户端进行获取并进行解析&#xff0c;把解析出来的目录按照原本的结构显示在本地。 cJSON是一个超轻巧&#xff0c;携带方便&#xff0c;单文件&#xff0c;简单的可以作为…...

贵阳地铁建设网站/seo是什么工作内容

2019独角兽企业重金招聘Python工程师标准>>> [toc] 网络协议&#xff08;networking protocol&#xff09; 网络协议即为计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络协议是由三个要素组成&#xff1a;语义、语法、时序&#xff0c;人们形象地把这…...

个人怎么做ipv6的网站/百度收录推广

首先保证没有客户端使用并在administrator管理器的工具中锁定数据库&#xff0c;其次把整个数据库备份一份&#xff0c;以防万一。1、在VSS服务器上运行CMD&#xff0c;打开DOS窗口。2、进入VSS安装目录。如 cd C:\Program Files (x86)\Microsoft Visual SourceSafe3、运行修复…...

大型网站域名/网页制作工具

续上文。来的时候就琢磨着看什么&#xff0c;心想无人区和私人定制都刚上映不久&#xff0c;犹豫着看那部电影的时候&#xff0c;就看见约我的那个女孩站在电影院门口&#xff0c;身边还有一名男子&#xff0c;不知道在争吵什么。我的英雄气节促使我大步就上去问个究竟。“怎么…...