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 ...
随机推荐
- 23.备忘录模式(Memento Pattern)
using System; using System.Collections.Generic; namespace ConsoleApplication6 { /// <summary> ...
- ASP.NET Web API 中的异常处理(转载)
转载地址:ASP.NET Web API 中的异常处理
- 知乎大牛的关于JS解答
很多疑惑一扫而空.... http://www.zhihu.com/question/35905242?sort=created JS的单线程,浏览器的多进程,与CPU,OS的对位. 互联网移动的起起 ...
- 在Activity和Application中使用SharedPreferences存储数据
1.在Activity中创建SharedPreferences对象及操作方法 SharedPreferences pre=getSharedPreferences("User", ...
- linux的<pthread.h>
转自:http://blog.sina.com.cn/s/blog_66cc44d00100in5b.html Linux系统下的多线程遵循POSIX线程接口,称为pthread.编写Linux下的多 ...
- 时间:UTC时间、GMT时间、本地时间、Unix时间戳
转自:http://blog.csdn.net/u012102306/article/details/51538574 1.UTC时间 与 GMT时间 我们可以认为格林威治时间就是时间协调时间(GMT ...
- [转]svn常用命令
谢谢原作者:http://blog.sina.com.cn/s/blog_963453200101eiuq.html 1.检出svn co http://路径(目录或文件的全路径) [本地目录全路 ...
- AngularJS - 指令入门
指令,我将其理解为AngularJS操作HTML element的一种途径. 由于学习AngularJS的第一步就是写内置指令ng-app以指出该节点是应用的根节点,所以指令早已不陌生. 这篇日志简单 ...
- Open judge C16H:Magical Balls 快速幂+逆元
C16H:Magical Balls 总时间限制: 1000ms 内存限制: 262144kB 描述 Wenwen has a magical ball. When put on an infin ...
- sql篇 select from where group by having order by
以前,自己总是记不住如何用group by,如何用order by,什么时候用group by,什么时候用order by,什么时候两者一起用,怎么用,谁先谁后,现在,我们就一起来说一下Select ...