洛谷P3870 [TJOI2009] 开关 (线段树)
简单的省选题......
打异或标记即可。
1 #include<bits/stdc++.h>
2 const int N=2e5+10;
3 using namespace std;
4 int n,m,a,b,c;
5 struct node{
6 int l,r,num,lazy;
7 }t[N<<2];
8 int read(){
9 int x=0,f=1;char c=getchar();
10 while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
11 while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
12 return x*f;
13 }
14
15 void pushup(int k){
16 t[k].num=t[k<<1].num+t[k<<1|1].num;
17 }
18
19 void pushdown(int k){
20 if(t[k].lazy){
21 t[k<<1].num=t[k<<1].r-t[k<<1].l+1-t[k<<1].num;
22 t[k<<1|1].num=t[k<<1|1].r-t[k<<1|1].l+1-t[k<<1|1].num;
23 t[k<<1].lazy^=1;
24 t[k<<1|1].lazy^=1;
25 t[k].lazy=0;
26 }
27 }
28
29 void build(int k,int l,int r){
30 t[k].l=l,t[k].r=r;
31 if(l==r) return ;
32 int mid=(l+r)>>1;
33 build(k<<1,l,mid);build(k<<1|1,mid+1,r);
34 }
35
36 void change(int k,int l,int r){
37 if(t[k].l>=l && t[k].r<=r){
38 t[k].lazy^=1;
39 t[k].num=t[k].r-t[k].l+1-t[k].num;
40 return ;
41 }
42 pushdown(k);
43 int mid=(t[k].l+t[k].r)>>1;
44 if(l<=mid) change(k<<1,l,r);
45 if(r>mid) change(k<<1|1,l,r);
46 pushup(k);
47 }
48
49 int query(int k,int l,int r){
50 if(t[k].l>=l && t[k].r<=r) return t[k].num;
51 pushdown(k);
52 int ans=0;
53 int mid=(t[k].l+t[k].r)>>1;
54 if(l<=mid) ans+=query(k<<1,l,r);
55 if(r>mid) ans+=query(k<<1|1,l,r);
56 return ans;
57 }
58
59 int main(){
60 n=read(),m=read();
61 build(1,1,n);
62 while(m--){
63 c=read(),a=read(),b=read();
64 if(c==0) change(1,a,b);
65 else cout<<query(1,a,b)<<endl;
66 }
67 }
洛谷P3870 [TJOI2009] 开关 (线段树)的更多相关文章
- 洛谷P3870 [TJOI2009]开关
题目描述 现有\(N(2 ≤ N ≤ 100000)\)盏灯排成一排,从左到右依次编号为:\(1,2,......,N\).然后依次执行\(M(1 ≤ M ≤ 100000)\)项操作,操作分为两种: ...
- 洛谷 P3870 [TJOI2009]开关
题意简述 有n盏灯,默认为关,有两个操作: 1.改变l~r的灯的状态(把开着的灯关上,关着的灯打开) 2.查询l~r开着的灯的数量 题解思路 维护一个线段树,支持区间修改,区间查询 懒标记每次^1 代 ...
- 洛谷 P3870 [TJOI2009]开关 题解
原题链接 前置知识: 线段树的单点.区间的修改与查询. 一看,我们需要维护两个操作: 区间取反: 区间求和. (因为区间 \(1\) 的个数,就是区间的和) 典型的 线段树 . 如果你只会线段树的 区 ...
- 【BZOJ】1012: [JSOI2008]最大数maxnumber /【洛谷】1198(线段树)
Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插 ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- 洛谷P3372/poj3468(线段树lazy_tag)(询问区间和,支持区间修改)
洛谷P3372 //线段树 询问区间和,支持区间修改 #include <cstdio> using namespace std; struct treetype { int l,r; l ...
- 洛谷P4065 [JXOI2017]颜色(线段树)
题意 题目链接 Sol 线段树板子题都做不出来,真是越来越菜了.. 根据题目描述,一个合法区间等价于在区间内的颜色没有在区间外出现过. 所以我们可以对于每个右端点,统计最长的左端点在哪里,刚开始以为这 ...
- 洛谷P5111 zhtobu3232的线段树
题意:给定线段树,上面若干个节点坏了,求能表示出多少区间. 区间能被表示出当且仅当拆出来的log个节点都是好的. 解:每个区间在最浅的节点处计算答案. 对于每个节点维护从左边过来能有多少区间,从右边过 ...
- 洛谷P3960 列队 NOIp2017 线段树/树状数组/splay
正解:动态开点线段树 解题报告: 传送门! 因为最近学主席树的时候顺便get到了动态开点线段树?刚好想起来很久很久以前就想做结果一直麻油做的这题,,,所以就做下好了QAQ 然后说下,这题有很多种方法, ...
随机推荐
- 彻底搞懂kubernetes调度框架与插件
调度框架 [1] 本文基于 kubernetes 1.24 进行分析 调度框架(Scheduling Framework)是Kubernetes 的调度器 kube-scheduler 设计的的可插拔 ...
- YII http缓存
http禁止缓存原理 header('Expires: 0'); header('Last-Modified: '. gmdate('D, d M Y H:i:s') . ' GMT'); heade ...
- Spring 常见面试题总结 | JavaGuide
首发于 JavaGuide 在线网站:Spring 常见面试题总结 最近在对 JavaGuide 的内容进行重构完善,同步一下最新更新,希望能够帮助你. Spring 基础 什么是 Spring 框架 ...
- 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题. 面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像 ...
- 在oracle中创建管理员密码
1.因为在安装Oracle11g时没有设置sys和system用户的密码,导致登陆不上SQLplus,后面用sqlplus / as sysdba ,密码为:root登陆上去创建了密码. 2.如下图
- 从零开始Blazor Server(9)--修改Layout
目前我们的MainLayout还是默认的,这里我们需要修改为BootstrapBlazor的Layout,并且处理一下菜单. 修改MainLayout BootstrapBlazor已经自带了一个La ...
- 【Java面试】Java有几种文件拷贝方式,哪一种效率最高?
"Java有几种文件拷贝方式,哪一种效率最高?" 这个问题是京东一面的时候,针对4年经验的同学的一个面试题. 大家好,我是Mic,一个工作了14年的Java程序员. 关于这个问题的 ...
- 关于linux的一点好奇心(四):tail -f文件跟踪实现
关于文件跟踪,我们有很多的实际场景,比如查看某个系统日志的输出,当有变化时立即体现,以便进行问题排查:比如查看文件结尾的内容是啥,总之是刚需了. 1. 自己实现的文件跟踪 我们平时做功能开发时,也会遇 ...
- MySQL主从-报错
安装: 环境: 系统:centos7 x3 master:192.168.220.133 slave1:192.168.220.136 slave2:192.168.220.137 mysql服务器, ...
- Bert不完全手册7. 为Bert注入知识的力量 Baidu-ERNIE & THU-ERNIE & KBert
借着ACL2022一篇知识增强Tutorial的东风,我们来聊聊如何在预训练模型中融入知识.Tutorial分别针对NLU和NLG方向对一些经典方案进行了分类汇总,感兴趣的可以去细看下.这一章我们只针 ...