RMQ 训练 之 codevs 1690 开关灯 已经搞定
思路 懒标记法 记stop[rt] 表示 rt这个线段树节点的下方儿子们需要被更新几次 记住是下方 量纲不要乱 否则写的一堆渣代码
我的代码里面black是维护黑灯的数量 其实做烦了 如果是维护白灯数量更简单
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define lrt rt<<1
#define rrt rt<<1|1
#define getmid int mid=(l+r)/2
using namespace std;
const int maxn=; int n,m,black[maxn*],stop[maxn*]; void pushdown(int l,int r,int rt)
{
getmid;
stop[lrt]+=stop[rt];
stop[rrt]+=stop[rt];
if(stop[rt]%==)
{
black[lrt]=mid-l+-black[lrt];
black[rrt]=r-mid-black[rrt];
}
stop[rt]=;
} void bud(int l,int r,int rt)
{
if(l==r) {
black[rt]=;
return;
}
getmid;
bud(lson);
bud(rson);
black[rt]=black[lrt]+black[rrt];
} int query(int l,int r,int rt,int a,int b)
{
pushdown(l,r,rt);
if(a<=l && b>=r)
{
return black[rt];
} getmid;
int ans=;
if(a<=mid) ans=query(lson,a,b);
if(b>mid) ans=ans+query(rson,a,b);
return ans;
} void update(int l,int r,int rt,int a,int b)
{
pushdown(l,r,rt);
if(a<=l && b>=r)
{
black[rt]=r-l+-black[rt];
stop[rt]++;
return;
}
getmid;
if(a<=mid) {update(lson,a,b);}
if(b>mid) {update(rson,a,b);}
black[rt]=black[lrt]+black[rrt];
} int main()
{
//freopen("lites.in","r",stdin);
//freopen("lites.out","w",stdout);
scanf("%d%d",&n,&m);
bud(,n,); for(int i=,a,b,c;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(a==)
{
update(,n,,b,c);
}
else
{
cout<<c-b+-query(,n,,b,c)<<endl;;
}
} return ;
}
RMQ 训练 之 codevs 1690 开关灯 已经搞定的更多相关文章
- 线段树--codevs 1690 开关灯
codevs 1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description YYX家门前的街上有N(2& ...
- Codevs 1690 开关灯 USACO
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...
- 线段树——codevs 1690 开关灯
先来一发题目: 1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点 ...
- codevs 1690 开关灯 线段树+延迟标记
1690 开关灯 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...
- codevs——1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- RMQ训练题 codevs 1291 火车线路 已经搞定
就是线段树维护区间的最小值 但是要注意 本题坑人的地方 是 a到b站 实际上是维护a到b-1 因为b站已经下车了 我勒个去呀 #include<iostream> #include ...
- codevs 1690 开关灯 线段树水题
没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...
- codevs 1690 开关灯 线段树区间更新 区间查询Lazy
题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...
- Code[VS]1690 开关灯 题解
Code[VS]1690 开关灯 题解 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description: YYX家门前 ...
随机推荐
- Win10/UWP开发—SystemNavigationManager
Win10系统为确保所有应用中的一致导航体验,提供后退导航功能.当你的应用在手机.平板电脑上或者在支持系统后退功能的电脑或笔记本电脑上运行时,系统会在"后退"按钮被按下时通知你的应 ...
- Unity3d游戏场景优化杂谈(2)
动态实时灯光相比静态灯光,非常耗费资源.所以除了能动的角色和物体(比如可以被打的到处乱飞的油桶)静态的地形和建筑,通通使用Lightmap. 强大的Unity内置了一个强大的光照图烘焙工具Beast, ...
- 《剑指offer》面试题11: 数值的整数次方
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
- java 静态代理-积木系列
代理模式的定义:Provide a surrogate or placeholder for another object to controlaccess to it(为其他对象提供一种代理以控制对 ...
- i5 6300HQ 和 i7 6700HQ
i7 6700HQ: 四核八线程 14nm 45W 2.6-3.5GHz 支持DDR4 2133内存 三级缓存6M HD Graphics 530集显 i5 6300HQ: 四核四线程 14nm 45 ...
- [读书笔记]自动装箱的陷阱以及==与equals
先看一段代码,来自周志明的<深入理解Java虚拟机>. Integer a = 1; Integer b = 2; Integer c = 3; Integer d = 3; Intege ...
- python3 如何使用ip、爬虫
使用urllib.request.random模块,不说了贴代码 url="*"; iplist=['70.254.226.206:8080'];proxy_support=url ...
- QT5学习过程的小问题集锦
*** only available with -std=c++11 or -std=gnu++11 添加以下代码到*.pro文件. CONFIG += c++11 在 Qt creator 中设置 ...
- ping指定地址
最近用到相应功能,网上搜了下. 感谢网友的分享,原文链接如下:http://blog.csdn.net/nanfeiyannan/article/details/6636280 稍微更改了内容,代码如 ...
- [UI]抽屉菜单DrawerLayout分析(一)
本文转载于:http://www.cnblogs.com/avenwu/archive/2014/04/16/3669367.html 侧拉菜单作为常见的导航交互控件,最开始在没有没有android官 ...