先来一发题目:

1690 开关灯

时间限制: 1 s

空间限制: 128000 KB

题目描述 Description

YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人陆续按下开关,这些开关可以改变从第i盏灯到第j盏灯的状态,现在YYX想知道,从第x盏灯到第y盏灯中有多少是亮着的(1<=i,j,x,y<=N)

输入描述 Input Description

第 1 行: 用空格隔开的两个整数N和M

第 2..M+1 行: 每行表示一个操作, 有三个用空格分开的整数: 指令号(0代表按下开关,1代表询问状态), x 和 y

输出描述 Output Description

第 1..询问总次数 行:对于每一次询问,输出询问的结果

样例输入 Sample Input

4 5
0 1 2
0 2 4
1 2 3
0 2 4
1 1 4
样例输出 Sample
Output

1
2

数据范围及提示 Data Size & Hint

一共4盏灯,5个操作,下面是每次操作的状态(X代表关上的,O代表开着的):

XXXX ->
OOXX -> OXOO -> 询问1~3 -> OOXX -> 询问1~4

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 100000+10
struct node
{
int l,r;
int val;
int d;
}a[*N];
int n,m,p,x,y; void update(int );
void buildtree(int,int,int);
void down(int);
void add(int,int,int,int,int);
int query(int ,int,int,int,int); int main()
{
scanf("%d%d",&n,&m);
buildtree(,,n);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&p,&x,&y);
if(p==)
{
add(,,n,x,y);
}
else printf("%d\n",query(,,n,x,y));
}
return ;
}
void update(int k)
{
int lch=k*,rch=(k*)+;
a[k].val=a[lch].val+a[rch].val;
}
void buildtree(int k,int l,int r)
{
a[k].l=l;a[k].r=r;
if(l==r)
{
a[k].val=a[k].d=;
return ;
}
int mid=(l+r)/,lch=k*,rch=(k*)+;
buildtree(lch,l,mid);
buildtree(rch,mid+,r);
update(k);
}
void down(int k)
{
int lch=k*,rch=(k*)+;
a[lch].d+=a[k].d;
a[lch].d%=;
a[lch].val=(a[lch].r-a[lch].l+)-a[lch].val;
a[rch].d+=a[k].d;
a[rch].d%=;
a[rch].val=(a[rch].r-a[rch].l+)-a[rch].val;
a[k].d=;
}
void add(int k,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
a[k].d++;
a[k].d%=;
a[k].val=(r-l+)-a[k].val;
return;
}
if(a[k].d)
down(k);
int mid=(l+r)/,lch=k*,rch=(k*)+;
if(x<=mid)
add(lch,l,mid,x,y);
if(y>mid)
add(rch,mid+,r,x,y);
update(k);
}
int query(int k,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
return a[k].val;
}
if(a[k].d)
down(k);
int mid=(l+r)/,lch=k*,rch=(k*)+;
int sum=;
if(x<=mid)
sum+=query(lch,l,mid,x,y);
if(y>mid)
sum+=query(rch,mid+,r,x,y);
return sum;
}

线段树——codevs 1690 开关灯的更多相关文章

  1. 线段树--codevs 1690 开关灯

    codevs 1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description YYX家门前的街上有N(2& ...

  2. codevs 1690 开关灯 线段树+延迟标记

    1690 开关灯  时间限制: 1 s  空间限制: 128000 KB   题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这 ...

  3. codevs 1690 开关灯 线段树区间更新 区间查询Lazy

    题目描述 Description YYX家门前的街上有N(2<=N<=100000)盏路灯,在晚上六点之前,这些路灯全是关着的,六点之后,会有M(2<=m<=100000)个人 ...

  4. Codevs 1690 开关灯 USACO

    1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...

  5. codevs——1690 开关灯

    1690 开关灯 USACO  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description YYX家门前的街上有N( ...

  6. RMQ 训练 之 codevs 1690 开关灯 已经搞定

    思路 懒标记法  记stop[rt] 表示 rt这个线段树节点的下方儿子们需要被更新几次  记住是下方 量纲不要乱  否则写的一堆渣代码 我的代码里面black是维护黑灯的数量 其实做烦了  如果是维 ...

  7. codevs 1690 开关灯 线段树水题

    没什么好说的,标记put表示开关是否开着. #include<cstdio> #include<cstring> #include<algorithm> using ...

  8. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  9. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

随机推荐

  1. VC++开发AutoCAD 2018/objectARX 用向导新建项目无法新建的问题

    话说笔者最近想用新机子上装的AutoCAD ObjectARX 2018来进行二次开发,兴致勃勃安装了ARX API和向导, 然后打开VS2015,新建项目,无法新建. 折腾了一下,还是没有解决,后面 ...

  2. C语言第九次作业

    一.PTA实验作业 题目1:统计大于等于平均分人数 1. 本题PTA提交列表 2.设计思路 float i为循环变量,sum=0,count=0来表示所求人数 float *p=s来储存首地址 for ...

  3. Scrum 冲刺 第七日

    Scrum 冲刺 第七日 站立式会议 燃尽图 今日任务安排 项目发布说明 站立式会议 返回目录 燃尽图 返回目录 今日任务安排 返回目录 项目发布说明 本版本的新功能 不只是简单打地鼠,还有一些不能打 ...

  4. python3爬虫之入门和正则表达式

    前面的python3入门系列基本上也对python入了门,从这章起就开始介绍下python的爬虫教程,拿出来给大家分享:爬虫说的简单,就是去抓取网路的数据进行分析处理:这章主要入门,了解几个爬虫的小测 ...

  5. java从网络中下载图片到本地

    public class imageDownload { public static void main(String[] args) { String url = "http://loca ...

  6. (原创)带模板的OLE输出EXCEL

    其实带模板的OLE输出EXCEL就是将要输出的EXCEL中一些拥有固定值(如标题,表头行等)的单元格先填充好数据和设置好格式后作为模板上传到SAP 中.这样后续在输出EXCEL时只需从SAP中将模板下 ...

  7. img加载卡顿,解决办法

    我觉得我在这个项目里遇到了太多的第一次.比如上一篇博文:在在360.UC等浏览器,img不加载原因. 当前情况是:图片加载缓慢,图片加载时出现卡顿. 上图:我缩放了图片,估计有点变形.能说明情况就行, ...

  8. Ubuntu命令行连接WPA/WPA2无线网线

    一,连接无加密无线网络zhang:sudo ip link set wlan0 up sudo iw dev wlan0 connect zhangsudo dhclient wlan0 二,连接WP ...

  9. RocketMQ(二):RPC通讯

    匠心零度 转载请注明原创出处,谢谢! RocketMQ网络部署图 NameServer:在系统中是做命名服务,更新和发现 broker服务. Broker-Master:broker 消息主机服务器. ...

  10. Mego(2) - NET主流ORM框架分析

    接上文我们测试了各个ORM框架的性能,大家可以很直观的看到各个ORM框架与原生的ADO.NET在境删改查的性能差异.这里和大家分享下我对ORM框架的理解及一些使用经验. ORM框架工作原理 典型ORM ...