先来一发题目:

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. Kettle 初始配置数据量类型资源库

    PS:有段时间不使用Kettle了,但总遇到小伙伴问起,写一篇记录下. 文档使用版本:KETTLE 7.0 Kettle资源库可分为文件与数据库,文件型只需要配置好存放路径就行,这边介绍的是配置数据库 ...

  2. 第二次作业:软件分析之Steam的前世今生

    摘要:本次作业我将介绍一下Steam的相关内容,以及对Steam的相关调研测评,以及需求分析,最后就是对Steam的建议以及在中国的发展提出相应的建议 一.相关信息      Steam是一个整合游戏 ...

  3. java web 初学

    我希望在本学期本堂课上学会使用java web 框架 精通mvc架构模式 学会通过框架和数据库对产品进行构造与编写. 我计划每周用16小时的时间进行学习java web 一周4学时上课时间 周一到周五 ...

  4. Alpha冲刺Day12

    Alpha冲刺Day12 一:站立式会议 今日安排: 由黄腾飞和张梨贤继续完成政府人员模块下的风险管控子模块下的分级统计展示 由林静继续完成企业注册模块 由周静平完成登录页面模块 二:实际项目进展 人 ...

  5. Ubuntu下tomcat或eclipse启动提示没有java环境问题

    tomcat和eclipse默认使用了openjdk,通过压缩包安装的jdk无法被识别,通过修改tomcat/bin下的catalina.sh添加jdk和jre路径即可 sudo gedit cata ...

  6. 为SRS流媒体服务器添加HLS加密功能(附源码)

    为SRS流媒体服务器添加HLS加密功能(附源码) 之前测试使用过nginx的HLS加密功能,会使用到一个叫做nginx-rtmp-module的插件,但此插件很久不更新了,网上搜索到一个中国制造的叫做 ...

  7. 记一下webstorm快键键

    #####新建文件````ctrl+alt+insert````#####结构速写````div>ul>li*4>p | div>h1+p | input:text | div ...

  8. LeetCode & Q53-Maximum Subarray-Easy & 动态规划思路分析

    Array DP Divide and Conquer Description: Find the contiguous subarray within an array (containing at ...

  9. Spring Boot整合Spring Security

    Spring Boot对于该家族的框架支持良好,但是当中本人作为小白配置还是有一点点的小问题,这里分享一下.这个项目是使用之前发布的Spring Boot会员管理系统重新改装,将之前filter登录验 ...

  10. 启动eclipse时出现“Failed to load the JNI shared library jvm.dll”错误及解决

    昨晚安装另一个版本的eclipse,启动时出现了"Failed to load the JNI shared library jvm.dll"错误: 1.刚开始以为是因为当时没有将 ...