「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」简单题 线段树的更多相关文章

  1. 洛谷P5057 [CQOI2006]简单题(线段树)

    题意 题目链接 Sol 紫色的线段树板子题??... #include<iostream> #include<cstdio> #include<cmath> usi ...

  2. 「洛谷4197」「BZOJ3545」peak【线段树合并】

    题目链接 [洛谷] [BZOJ]没有权限号嘤嘤嘤.题号:3545 题解 窝不会克鲁斯卡尔重构树怎么办??? 可以离线乱搞. 我们将所有的操作全都存下来. 为了解决小于等于\(x\)的操作,那么我们按照 ...

  3. 「洛谷3870」「TJOI2009」开关【线段树】

    题目链接 [洛谷] 题解 来做一下水题来掩饰ZJOI2019考炸的心情QwQ. 很明显可以线段树. 维护两个值,\(Lazy\)懒标记表示当前区间是否需要翻转,\(s\)表示区间还有多少灯是亮着的. ...

  4. LOJ2255. 「SNOI2017」炸弹 (线段树)

    本文为线段树做法 (听说可以tarjan缩点+拓扑? 感觉差不多..而且这样看起来方便很多 找到左端点的过程可以看作 点 -> 区间内lowerbound最小的点 -> lowerboun ...

  5. LOJ 2585 「APIO2018」新家 ——线段树分治+二分答案

    题目:https://loj.ac/problem/2585 算答案的时候要二分! 这样的话,就是对于询问位置 x ,二分出一个最小的 mid 使得 [ x-mid , x+mid ] 里包含所有种类 ...

  6. 2018.11.01 loj#2319. 「NOIP2017」列队(线段树)

    传送门 唉突然回忆起去年去noipnoipnoip提高组试水然后省二滚粗的悲惨经历... 往事不堪回首. 所以说考场上真的有debuffdebuffdebuff啊!!!虽然当时我也不会权值线段树 这道 ...

  7. LOJ2319. 「NOIP2017」列队【线段树】

    LINK 思路 神仙线段树 你考虑怎么样才能快速维护出答案 首先看看一条链怎么做? 首先很显然的思路是维护每个节点的是否出过队 然后对于重新入队的点 直接在后面暴力vector存一下就可以了 最核心的 ...

  8. Solution -「洛谷 P5787」「模板」二分图(线段树分治)

    \(\mathcal{Description}\)   Link.    \(n\) 个结点的图,\(m\) 条形如 \((u,v,l,r)\) 的边,表示一条连接 \(u\) 和 \(v\) 的无向 ...

  9. 「洛谷 P3834」「模板」可持久化线段树 题解报告

    题目描述 给定n个整数构成的序列,将对于指定的闭区间查询其区间内的第k小值. 输入输出格式 输入格式 第一行包含两个正整数n,m,分别表示序列的长度和查询的个数. 第二行包含n个整数,表示这个序列各项 ...

随机推荐

  1. ngix介绍

    ngix能做什么?  1 反向代理 2 负载均衡 3 正向代理 4 HTTP服务器(动静分离) 1 反向代理 Reverse Proxy 是指以代理服务器来接受来自internet或者是客户端的连接请 ...

  2. 使用jMeter对基于SAP ID service进行Authentication的Restful API进行并发测试

    这篇文章本来Jerry只在SAP社区上写了英文版的,可以通过点击文末的"阅读原文"获得.后来有两位做Marketing Cloud开发的德国同事,写邮件询问关于文章的更多细节,声称 ...

  3. ip地址、域名、DNS、URL(即网址)的区别与联系

    域名和ip ================================================================ 我们也知道每一台机都有一个唯一ip地址, 特别难记,所以出 ...

  4. Java程序猿跳槽应该学哪些方面的技术

    互联网产品.大型企业级项目常会用到的: 并发处理技术 具体到Java上通常是涉及java.util.concurrent.并发锁机制.NIO等方面,当然最近比较火爆的Netty框架也可以作为高并发处理 ...

  5. python 爬虫抓取 MOOC 中国课程的讨论区内容

    一:selenium 库 selenium 每次模拟浏览器打开页面,xpath 匹配需要抓取的内容.可以,但是特别慢,相当慢.作为一个对技术有追求的爬虫菜鸡,狂补了一些爬虫知识.甚至看了 scrapy ...

  6. 异步网络编程aiohttp的使用

    aiohttp的使用 aiohttp Asynchronous HTTP Client/Server for asyncio and Python. Supports both Client and ...

  7. linux 、 CentOs ---> 环境变量设置

    Linux下环境变量设置 1.在Windows 系统下,很多软件安装都需要配置环境变量,比如 安装 jdk ,如果不配置环境变量,在非软件安装的目录下运行javac 命令,将会报告找不到文件,类似的错 ...

  8. selenium 操作多个窗口间切换

    #coding=gbk ''' selenium多个窗口间切换 ''' from selenium import webdriver as wd from selenium.webdriver imp ...

  9. 【python】使用plotly生成图表数据

    安装 在 ubuntu 环境下,安装 plotly 很简单 python 版本2.7+ pip install plotly 绘图 在 plotly 网站注册后,可以直接将生成的图片保存到网站上,便于 ...

  10. Java基础 String/StringBuff/StringBuilder 常用操作方法复习/内存分析/三者的效率比较

    附:jdk1.8使用IDEA安装.创建.使用JUnit单元测试 笔记总结: /**String 复习 * 1.像C++这样的char arr[]="..." 的方式无法声明Java ...