Code[VS]1690 开关灯 题解
#include "bits/stdc++.h" #define maxN 100010 using namespace std;
typedef long long QAQ; struct Tree
{
int l, r ;
QAQ sum ;//当前开着的灯数量
bool idv;//开关灯的延迟标记
}; QAQ Min(QAQ a, QAQ b)
{
return a > b ? b : a;
} Tree tr[maxN << ]; void Push_down ( int i , int m)
{
if(tr[i].idv)//当前结点有延迟标记
{
tr[i << ].idv = !tr[i << ].idv ;//左
tr[i << | ].idv = !tr[i << | ].idv ;//右
tr[i << ].sum = tr[i << ].r - tr[i << ].l + - tr[i << ].sum ;//所以灯开关状态取反
tr[i << | ].sum = tr[i << | ].r - tr[i << | ].l + - tr[i << | ].sum ;//同上
tr[i].idv = !tr[i].idv ;//清零!!!
}
} void Build_Tree (int x , int y, int i)
{
tr[i].l = x ;//左端点
tr[i].r = y ;//右端点
if( x == y)return ;
else
{
QAQ mid = (tr[i].l + tr[i].r ) >> ;
Build_Tree ( x , mid , i << );//左递归
Build_Tree (mid + , y , i << | );//右递归
}
} void Update_Tree (int q , int w , int i)
{
if( w >= tr[i].r && q <= tr[i].l)//被完全包含
{
tr[i].idv = !tr[i].idv;//延迟标记
QAQ tot = tr[i].r - tr[i].l + ;//当前结点总共的灯
tr[i].sum = tot - tr[i].sum;//开关状态全部取反
return ;
}
else
{
Push_down( i , tr[i].r - tr[i].l + );//信息下传函数
QAQ mid = (tr[i].l + tr[i].r) >> ;
if( q > mid )
{
Update_Tree ( q , w , i << | );
}
else if ( w <= mid )
{
Update_Tree ( q , w , i << );
}
else
{
Update_Tree ( q , w , i << | );
Update_Tree ( q , w , i << );
}
tr[i].sum = tr[i << ].sum + tr[i << | ].sum ;//回溯更新
}
} QAQ Query_Tree (int q , int w , int i )
{
if( w >= tr[i].r && q <= tr[i].l)
{
return tr[i].sum;//被完全包含直接返回值
}
else
{
Push_down( i , tr[i].r - tr[i].l + );
QAQ mid = (tr[i].l + tr[i].r ) >> ;
if( q > mid )
{
return Query_Tree ( q , w , i << | );
}
else if ( w <= mid )
{
return Query_Tree ( q , w , i << );
}
else
{
return Query_Tree ( q , w , i << | ) + Query_Tree ( q , w , i << );
}
}
} int main ( )
{
QAQ N, M;
int op, l, r;
scanf("%d%d", &N, &M);
Build_Tree ( , N , );//建树操作
while (M--)
{
scanf("%d", &op);
if( !op )
{
scanf("%d%d", &l, &r);
Update_Tree ( l , r , );//更新树
}
else
{
scanf("%d%d", &l, &r);
printf("%lld\n", Query_Tree ( l , r , ));//查询
}
}
return ;
}
Code[VS]1690 开关灯 题解的更多相关文章
- codevs——1690 开关灯
1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description YYX家门前的街上有N( ...
- Code[VS] 1022 覆盖 题解
Code[VS] 1022 覆盖 题解 Hungary Algorithm 题目传送门:Code[VS] 1022 题目描述 Description 有一个N×M的单位方格中,其中有些方格是水塘,其 ...
- Code[VS] 2152 滑雪题解
Code[VS] 2152 滑雪题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行 ...
- 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 开关灯
codevs 1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description YYX家门前的街上有N(2& ...
- Code[VS] 2370 LCA 题解
Code[VS] 2370 小机房的树 题解 RMQ 树链剖分 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同 ...
- 【wikioi】1690 开关灯(线段树)
http://wikioi.com/problem/1690/ 这题可不能算是水题了.. 在线段树中,我只想到了lazy改变,但是没想到lazy变后size怎么变,我的策略变成了lazy为0时size ...
随机推荐
- 锁ReaderWriterLockSlim介绍
概述 ReaderWriterLockSlim 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问: 常用的方法: cacheLock.EnterReadLock();//加上读取锁 ...
- poj 1195:Mobile phones(二维线段树,矩阵求和)
Mobile phones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 14391 Accepted: 6685 De ...
- HR外包系统 - 薪资项目分类
序号 薪资项目编码规则 6到9开头1 普通工资项目加项 7开头三位,7XX,不够时,从71XX开始2 普通工资项目减项 8开头三位,8XX,不够时,从81XX开始3 ...
- php echo return exit 区别
echo.print().printf().sprintf().vardump().varexport():都可以输出内容到网页,但不退出函数或程序. return:返回并立即退出,函数级别. die ...
- indeterminateDrawable
Android原生控件只有横向进度条一种,而且没法变换样式,比如原生rom的样子很丑是吧,当伟大的产品设计要求更换前背景,甚至纵向,甚至圆弧状的,咋办,比如ok,我们开始吧: 一)变换前背景 先来看看 ...
- Java学习随笔2:Java复合赋值表达式的小问题
问题:i += j只是i = i + j的简写么? 答案:非也!看下面的程序: int i = 5; long j = 8; i += j; // 可以通过编译且结果正确 i = i + j; // ...
- jdk 1.8 Executors
Class Executors java.lang.Object java.util.concurrent.Executors public class Executors extends Objec ...
- 利用myeclipse配置数据库连接池
作为一个习惯使用myeclipse的人来说,即使是数据库连接池也肯定是用ide配置了. 下面说一下用数据库连接池的配置. 1 创建工程.不多说了. 2 添加数据库连接程序驱动包.直接放到lib目录下即 ...
- mysql replace into用法与坑
需要主键一致 PRIMARY KEY (id) PRIMARY KEY (id, ts) 坑: https://blog.xupeng.me/2013/10/11/mysql-replace-into ...
- windows加入path路径
右键我的电脑,属性:高级系统设置,高级,环境变量:在系统变量中选path,编辑:将python安装路径加入即可(注意分号):