首页 > TAG信息列表 > P2572

【洛谷】 P2572 [SCOI2010]序列操作 (线段树)

P2572 [SCOI2010]序列操作 对于区间覆盖,我们都习以为常了,对于连续的\(1\)这种线段树区间连续问题,维护左儿子右端点连续最大和右儿子左端点连续最大即可解决,那么取反操作就是将区间连续的\(1\)和连续的\(0\)的数量交换,分别对\(0\)和\(1\)维护连续也可解决,再看懒标记的问题,首先赋值

题解 P2572序列操作

分析 对连续值和求和的询问都是比较板的,这里讲修改,赋值和翻转分别设置一个标记,思考它们的优先级,显然赋值高于翻转,所以在赋值时应清空翻转标记,在翻转时优先考虑能不能直接将赋值标记异或一,否则在改变自身即可。 Code #include<bits/stdc++.h> using namespace std; #define ls rt<

P2572 [SCOI2010]序列操作

写在前面 傻逼线段树题,码量第一次超 \(6.5k\) 因为不能考 \(NOIp\) 一气之下把它肝了(放屁,你是因为想看小说,而做数据结构不用脑子,好在DJ来的时候方便掩饰 个人感觉理解本题后会对线段树有更为深刻的理解,亦可增加对线段树的套路用法,了解各操作之间的优先级 本题解陈述尽量详细周全,若

Luogu P2572 [SCOI2010]序列操作(线段树)题解

细节狂魔题 题意:维护一个\(01\)序列,支持区间修改(全部变\(0\)或\(1\)),区间取反,区间求和,区间求最长1序列 做法 显然应该用线段树维护。 线段树需要维护:每段区间内\(0\)的数量,\(1\)的数量,最长\(1\)序列长度,最长\(0\)序列长度,从左端点开始的0/1序列长度,从右端点开始的\(0/1\)序列长度。