「CQOI2006」简单题 线段树
「CQOI2006」简单题 线段树
水。区间修改,单点查询。用线段树维护区间\([L,R]\)内的所有\(1\)的个数,懒标记表示为当前区间是否需要反转(相对于区间当前状态),下方标记时懒标记取反即可。
#include <cstdio>
#include <cmath>
#define sl (x<<1)
#define sr (x<<1|1)
#define MAXN 100010
using namespace std;
struct nod{
int l; int r;
bool lazy; int val;
} tre[MAXN*4];
void buildt(int l, int r, int x){
tre[x].l=l,tre[x].r=r;
if(l==r){
tre[x].val=0;
return;
}
int mid=(l+r)>>1;
buildt(l, mid, x<<1);
buildt(mid+1, r, x<<1|1);
}
void push_down(int x){
if(tre[x].lazy==0) return;
tre[sl].lazy=!tre[sl].lazy;
tre[sr].lazy=!tre[sr].lazy;
if(tre[x].lazy) tre[sl].val=(tre[sl].r-tre[sl].l+1)-tre[sl].val;
if(tre[x].lazy) tre[sr].val=(tre[sr].r-tre[sr].l+1)-tre[sr].val;
tre[x].lazy=0;
}
void change(int x, int ql, int qr){
if(ql<=tre[x].l&&tre[x].r<=qr){
tre[x].val=tre[x].r-tre[x].l+1-tre[x].val;
tre[x].lazy=!tre[x].lazy;
return;
}
push_down(x);
int mid=(tre[x].l+tre[x].r)>>1;
if(ql<=mid) change(sl,ql,qr);
if(qr>mid) change(sr,ql,qr);
tre[x].val=tre[sl].val+tre[sr].val;
}
int query(int x, int q){
if(tre[x].l==tre[x].r){
return tre[x].val;
}
push_down(x);
int mid=(tre[x].l+tre[x].r)>>1;
int ans=0;
if(q<=mid) ans=query(sl,q);
else ans=query(sr,q);
tre[x].val=tre[sl].val+tre[sr].val;
return ans;
}
int n,m;
int main()
{
scanf("%d %d", &n, &m);
buildt(1,n,1);
while(m--){
int t;
scanf("%d", &t);
if(t==1){
int l,r;
scanf("%d %d", &l, &r);
change(1,l,r);
}else{
int i;scanf("%d", &i);
printf("%d\n", query(1,i));
}
}
return 0;
}
「CQOI2006」简单题 线段树的更多相关文章
- 洛谷P5057 [CQOI2006]简单题(线段树)
题意 题目链接 Sol 紫色的线段树板子题??... #include<iostream> #include<cstdio> #include<cmath> usi ...
- 「洛谷4197」「BZOJ3545」peak【线段树合并】
题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...
- 「洛谷3870」「TJOI2009」开关【线段树】
题目链接 [洛谷] 题解 来做一下水题来掩饰ZJOI2019考炸的心情QwQ. 很明显可以线段树. 维护两个值,\(Lazy\)懒标记表示当前区间是否需要翻转,\(s\)表示区间还有多少灯是亮着的. ...
- LOJ2255. 「SNOI2017」炸弹 (线段树)
本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ...
- LOJ 2585 「APIO2018」新家 ——线段树分治+二分答案
题目:https://loj.ac/problem/2585 算答案的时候要二分! 这样的话,就是对于询问位置 x ,二分出一个最小的 mid 使得 [ x-mid , x+mid ] 里包含所有种类 ...
- 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)
传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道 ...
- LOJ2319. 「NOIP2017」列队【线段树】
LINK 思路 神仙线段树 你考虑怎么样才能快速维护出答案 首先看看一条链怎么做? 首先很显然的思路是维护每个节点的是否出过队 然后对于重新入队的点 直接在后面暴力vector存一下就可以了 最核心的 ...
- Solution -「洛谷 P5787」「模板」二分图(线段树分治)
\(\mathcal{Description}\) Link. \(n\) 个结点的图,\(m\) 条形如 \((u,v,l,r)\) 的边,表示一条连接 \(u\) 和 \(v\) 的无向 ...
- 「洛谷 P3834」「模板」可持久化线段树 题解报告
题目描述 给定n个整数构成的序列,将对于指定的闭区间查询其区间内的第k小值. 输入输出格式 输入格式 第一行包含两个正整数n,m,分别表示序列的长度和查询的个数. 第二行包含n个整数,表示这个序列各项 ...
随机推荐
- Yii2 设计模式——单例模式
单例模式 模式定义 单例模式确保一个类只有一个实例,并提供一个全局访问点.当现实中只需要一个对象,或者为了节省系统资源,又或者是为了共享数据的时候可以使用单例模式. 代码实现 我们先来看看单例模式的标 ...
- Mysql slave 延迟故障一列(无主键)
首先还是给出我见过的一些延迟可能: 大事物延迟 延迟略为2*执行时间 状态为:reading event from the relay log 大表DDL延迟 延迟略为1*执行时间 状态为:alter ...
- 如何使用JavaScript实现纯前端读取和导出excel文件(转)
转自小茗同学博客:https://www.cnblogs.com/liuxianan/p/js-excel.html js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯 ...
- (十四)Hibernate中的多表操作(4):单向一对一
案例一: 注解方式实现一对一 UserBean.java package bean; import java.io.Serializable; import javax.persistence.Col ...
- (二十)SpringBoot之集成mybatis:使用mybatis注解
一.使用mybatis注解的集成 1.1 引入maven依赖 <dependencies> <dependency> <groupId>org.springfram ...
- (十三)使用handler实现登录验证
一.Handel概念 J2EE Web 服务中的Handler技术特点非常像Servlet技术中的Filter.我们知道,在Servlet中,当一个HTTP到达服务端时,往往要经过多个Filter对请 ...
- ActivityMQ消息中间件【待完成】
1,MQ的引入 使用场景,将耗时的通知业务交给消息中间件[业务逻辑进行解耦] 使用消息中间件的逻辑交互 2,MQ的应用场景 首先消息中间件是一个异步处理 有两个关键点:①耗时:②业务的耦合度 案例1: ...
- Project Oberon
Project Oberon Project Oberon http://www.projectoberon.com/ Project Oberon 28.11.2018 / 11.12.2018 ...
- multer实现图片上传
multer实现图片上传: ejs代码: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- pymsql及事务
MySQL知识点补充 1.去重 distinct select distinct name,age from t1; # 针对查找出来的结果整行(记录)进行去重,也就是相同行只保存一个 注意点:dis ...