scoi2010序列操作

P2572 [SCOI2010] 序列操作 这个题还是有点复杂的,第二次写了40分钟一遍过真的惊讶,这个题一个结点不经需要维护0的信息也需要维护1的信息,那么我的结构题里面写了9个变量,每次向上传递的时候0和1的信息都要更新,然后是线段树的修改操作,赋值操作的优先级高,要先于值转换的操作,向下传递的时候,赋值完,左右两个孩子结点的转换懒标记应该变成和父亲一样的,询问操作的时候,区间的左右端点也是要传的,这个不要忘记了,总之这个题是线段是维护最大连续子列和的升级版本,还是可以的。 阅读详情
四川oi t了我两天  

原来只是一个宏定义。。。

真的什么心思都有了
整个人都好了。

宏定义  ?运算的max
max(A(),B())
就是  A()>B()?A():B()
四倍慢。。。
我还用了几次
于是从1秒多瞬间到了10妙多

WTF  i m really drunk



#include<cstdio>
#define N 100010
#define loop(i,j,k) for(int i=j;i<=k;i++)
int n,m;
int s[N];
int op,u,v;
struct TREE {
	int l,r,la;
	int L0,R0,K0,S0;
	int L1,R1,K1,S1;
	TREE () {la=-1;}
}t[N*3];
int max (int a,int b){
	if(a>b)
	return a;
	return b;
}
void readdata () {
	scanf("%d%d",&n,&m);
	loop(i,1,n)
		scanf("%d",&s[i]);
}
void pushup (int M) {
	int ls = (M << 1);
	int rs = (ls | 1);	
	t[M].S0 = t[ls].S0 + t[rs].S0 ;
	t[M].L0 = t[ls].L0 ;	
	t[M].R0 = t[rs].R0 ;	
	if(t[ls].L0 == t[ls].r - t[ls].l + 1)	
	t[M].L0 += t[rs].L0 ;
	if(t[rs].R0 == t[rs].r - t[rs].l + 1)
	t[M].R0 += t[ls].R0;	
	t[M].K0 = max (t[ls].K0 , t[rs].K0 );
	t[M].K0 = max (t[M].K0 , t[ls].R0 + t[rs].L0 );	
	t[M].S1 = t[ls].S1 + t[rs].S1 ;
	t[M].L1 = t[ls].L1 ;
	t[M].R1 = t[rs].R1 ;	
	if(t[ls].L1 == t[ls].r - t[ls].l + 1)	
	t[M].L1 += t[rs].L1 ;
	if(t[rs].R1 == t[rs].r - t[rs].l + 1)
	t[M].R1 += t[ls].R1;	
	t[M].K1 = max (t[ls].K1 , t[rs].K1 );
	t[M].K1 = max (t[M].K1, t[ls].R1 + t[rs].L1 );
}
void build (int l,int r,int M) {
	t[M].l = l;
	t[M].r = r;	
	if(l==r) {
		if(s[l]) {
			t[M].K1=t[M].L1=t[M].R1=t[M].S1=1;
			t[M].K0=t[M].L0=t[M].R0=t[M].S0=0;
		}
		else {
			t[M].K1=t[M].L1=t[M].R1=t[M].S1=0;
			t[M].K0=t[M].L0=t[M].R0=t[M].S0=1;
		}
		return ;
	}	
	int mid = (l + r) / 2;	
	build (l,mid,M<<1);
	build (mid+1,r,M << 1 | 1);			
	pushup(M);
}
inline void SWAP (int &a,int &b) {
	int temp=a;
	a=b;
	b=temp;
}
inline void work (int M,int f) {
	if(f<=1) {
		t[M].L0 = t[M].R0 = t[M].S0 =t[M].K0 = (f^1) * (t[M].r - t[M].l + 1);
		t[M].L1 = t[M].R1 = t[M].S1 =t[M].K1 = f * (t[M].r - t[M].l + 1);
	}
	else {
		SWAP(t[M].L0 ,t[M].L1 );
		SWAP(t[M].R0 ,t[M].R1 );
		SWAP(t[M].K0 ,t[M].K1 );
		SWAP(t[M].S0 ,t[M].S1 );
	}
}
inline void lazy (int M,int f) {
	if(t[M].la == -1 || (f==1||f==0) ) {  
		t[M].la = f;
	}
	else {
		if(t[M].la == 2) {
			t[M].la = -1;
		}
		else t[M].la = (t[M].la + 1)&1;
	}
}
void pushdown (int M) {
	int ls=(M<<1);
	int rs=(ls|1);
	lazy(ls,t[M].la );
	lazy(rs,t[M].la );
	work(ls,t[M].la );
	work(rs,t[M].la );
	t[M].la = -1;
}
void change (int f,int l,int r,int M) {
	int ls = (M << 1);
	int rs = (ls | 1);	
	if(t[M].l == l && t[M].r == r) {
		work(M,f);
		lazy(M,f);
		return;
	}
	if(t[M].la != -1)
		pushdown(M);
	int mid = (t[M].l + t[M].r )>>1;	
	if(l>mid) {
		change (f,l,r,rs);
	}
	else {
		if(r<=mid) {
			change (f,l,r,ls);
		}
		else {
			change (f,l,mid,ls);
			change (f,mid+1,r,rs);
		}
	}
	pushup(M);	
}
int find (int f,int l,int r,int M) {
	int ls = (M << 1);
	int rs = (ls | 1);
	if(l==t[M].l && r== t[M].r) {
		if(f==3)
		return t[M].S1 ;
		return t[M].K1 ;
	}
	if(t[M].la != -1)
		pushdown(M);
	int mid = (t[M].l + t[M].r )>>1;
	if(l>mid){
		return find(f,l,r,rs);
	}
	else {
		if(r<=mid) {
			return find (f,l,r,ls);
		}
		else {
			if(f==3)
			return find (f,l,mid,ls)+find (f,mid+1,r,rs);
			return max ( ( t[ls].R1  > mid-l+1 ? mid-l+1 : t[ls].R1)  +  ( t[rs].L1 > r-mid ? r-mid : t[rs].L1), max(find (f,l,mid,ls),find (f,mid+1,r,rs))  );
		}
	}
}
void solve () {
	loop(i,1,m) {
		scanf("%d%d%d",&op,&u,&v);
		if(op<=2)
			change (op,1+u,1+v,1);
		else
			printf("%d\n",find(op,1+u,1+v,1));
	}
}
int main () {
	readdata () ;
	build (1,n,1) ;
	solve () ;
}


半桥LLC谐振变换器及同步整流MATLAB仿真(一) LLC工作原理详细解析,工作过程详细拆解 阅读详情

相关推荐

关于RS485通讯TVS器件选择的经验

先说经验结论 如果你的RS485用于频繁热拔插, 比如作为手持终端使用, 且手持器与目标板非隔离, 那么使用6.8CA可能是更好的选择.因为有热拔插会产生浪涌, 而且在非隔离的场合有些工业设备接地也是无法保障的.对于使用场景较为单一的, 点对点或点对多场合. 可以使用最大峰值脉冲电流较小的SM712.这是在长期的产品设计中得到的经验. 仅供参考 一. TVS的工作原理和作用 瞬态电压抑制二极管 ...

qq_20163075的博客 6510

[SCOI2010]序列操作(思维 + 线段树 + 模拟)

太复杂的题,pushup和pushdown还是单独写出来比较好查询比较多的东西时,query直接返回node懒标记比较多的,一定要想清楚懒标记优先级以及之间的影响关系;懒标记太多的,修改时建议直接直接传懒标记,然后分类讨论一下关于懒标记的顺序问题(注意不是优先级)我们每次进行一次操作,最多就传一个种类的懒标记;那么对于tr[u]来说,当前这个懒标记和之前已经打上去的懒标记的时间顺序是不同的;但是我们不用去人为规定顺序,这时候我们就要考虑懒标记之间的影响;......

qq_53398102的博客 396

知识图谱:综述

第一种理解:知识图谱本质上是语义网络。本体论是语义网络中最重要的一个要素。第二种理解:知识图谱也叫做多关系图,由多种类型的节点和多种类型的边组成。课程以第二种理解为主。

u013250861的博客 479

[SCOI2010]序列操作

比之前那个区间最多公约数简单,结构体里维护一下区间0,1的个数,区间最长0,1连续串长度,区间左右端点最长连续0,1串长度即可,0,1都维护是为了翻转操作。对于翻转标记的lz数组需要分类讨论,对于合并区间的时候跨区间要单独讨论。

qq_73631501的博客 269

实现基于 Python 和 xterm.js 的 Web 交互终端demo

前端 (HTML):使用 xterm.js 作为前端终端模拟器库。创建了一个 WebSocket 连接到 ws://localhost:8765,这与后端服务器的地址和端口匹配。监听 WebSocket 消息,并将数据写入终端。同时监听用户输入并发送到服务器。后端 (Python):使用 websockets 库来创建 WebSocket 服务器,监听端口 8765。使用 paramiko 库来创建 SSH 客户端并连接到指定的远程服务器。

u010674101的专栏 876

Android OTA 更新面试题及参考答案

OTA 更新即空中下载技术(Over-the-Air Technology)更新,是一种通过无线网络对移动设备的系统软件或应用程序进行远程更新的技术手段。其原理是设备通过移动网络或 Wi-Fi 连接到服务器,服务器检测设备上可更新的软件版本,当有新的版本时,将更新包发送到设备上。设备接收后,在后台自动完成更新包的下载、安装等一系列操作,无需用户手动下载完整的系统镜像或应用安装包并通过数据线等方式进行安装。例如,当手机厂商推出新的安卓系统版本或安全补丁时,就会通过 OTA 方式推送给用户。

大模型大数据攻城狮的专栏 1629

【三分法】 SCOI2010 传送带 LibreOJ - 10017

https://loj.ac/p/10017 题目描述 原题来自:SCOI 2010 在一个 222 维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段 ABABAB 和线段 CDCDCD 。lxhgww 在 ABABAB 上的移动速度为 PPP ,在 CDCDCD 上的移动速度为 QQQ ,在平面上的移动速度 RRR。 现在 lxhgww 想从 AAA 点走到 DDD 点,他想知道最少需要走多长时间。 Solution 三分套三分。其实就是找一条AAA到DDD的最优路径,花费的时间

qq_20745893的博客 604

零基础基于U-Net网络实战眼底图像血管提取

文章目录1 前言2 血管提取任务概述3 U-Net架构简介4 眼底图像血管分割代码5 结果评估可视化(ROC曲线)6 改进U-Net网络完成眼底图像血管提取任务思路 1 前言 本文基于U-Net架构完成了视网膜血管的提取任务,基于Keras框架更简单的实现分割,网络、工具类、训练和预测的代码一目了然

NJU phd 在读。 5203

P2572 [SCOI2010] 序列操作 题解

个东西就可以了,不过细节还是有亿点多,注意在反转操作的时候一定不能清空之前修改操作的值,同时每次查询零散块的时候,都要先根据块的值和反转标记求出当前的。,然后再计算,最后再重新更新零散块所在块的信息。代码还是很好写的,直接按照上面的步骤维护。代码不长,但是写的时候一定要思路清晰……其实还是很好想的,但是似乎有一点难写。

m0_73020012的博客 1160

使用C#实现Padim算法的训练和推理:智能缺陷检测的前沿技术

Padim (Patch-based Deep Image Model) 是一种用于无监督异常检测的深度学习算法。它通过提取图像中的局部特征(patch),并在这些特征上构建一个正常样本的分布模型来识别异常。无监督学习:不需要标注数据,适用于缺乏标签的情况。局部特征提取:通过卷积神经网络提取图像的局部特征(patch)。低秩近似:利用低秩近似构建正常样本的协方差矩阵,有效降低计算复杂度。鲁棒性强:能够处理多种类型的缺陷和噪声。

墨夶的博客 1013

Spatial-ORMLLM: Improve Spatial Relation Understanding in the Operating Room with Multimodal Larg...

手术室(OR)中的精准空间建模是众多临床任务的基础,可为术中感知、风险规避及手术决策提供支持。现有方法虽利用大规模多模态数据集进行 latent 空间对齐,以隐式学习空间关系,但却忽视了多模态大型语言模型(MLLM)的3D能力。然而,这种方法存在两个问题:1)手术室通常缺乏多台视频和音频传感器,多模态3D数据难以获取;2)仅依赖易获取的2D数据训练,无法捕捉复杂场景中的细粒度细节。为解决这一问题,我们提出——首个针对手术室3D空间推理的大型视觉语言模型。

UnknownBody_2的博客 592

练习41,[SCOI2010] 序列操作【线段树】

稍微难一些的就是求[l,r] 区间内最多有多少个连续的 1,可以分别维护一段区间左端,中间,右端有多少个连续的1和0来实现。同时要注意的点是赋0和赋1标记可以覆盖取反标记,而取反标记不能覆盖赋0和赋1标记,而且取反标记更改时要^=1。此题还有一种解法是珂朵莉树,但只能过随机的数据,无法通过洛谷上已经针对过的数据。思路不是很难,码量很大,调试难度高,一个bug找一天(bushi。

ILECY~NEW 350

L2正则化与Ridge回归的关系

非常感谢您提供的详细任务描述和要求。我会尽力按照您的指引来撰写这篇技术博客文章。 L2正则化与Ridge回归的关系 1. 背景介绍 机器学习模型在训练过程中容易出现过拟合的问题,这会导致模型在训练集上表现很好但在测试集上泛化性能较差。为了解决这一问题,正则化技术应运而生。其中

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 659

[SCOI2010]序列操作 题解

[SCOI2010]序列操作 题解 前言 这道题很经典,特别是对于线段树的这个板块来说,完成后对线段树的理解会上一个档次。但是说实话,就算知道了这道题的思路,想要完成也很难,因为这个代码实在是太长了,而且线段树维护的变量态度多,很容易把人写晕,所以我就来发这一发题解,点明其中易错的几个点(尤其是我错的),以及每一个函数的详细解答,希望dalao们勿喷。 提示 如果想完成这道题,那么你至少要会以下操...

GJHAL的博客 614

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

[SCOI2010]序列操作 BZOJ1858 线段树

[SCOI2010]序列操作 BZOJ1858 线段树 题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[a,b]区间内的所有数全部取反,也就是...

loooooog的博客 214

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

P2572 [SCOI2010]序列操作

线段树

sdfzrlt的博客 701

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

BZOJ 1858 [Scoi2010]序列操作

1858: [Scoi2010]序列操作Time Limit: 10 Sec Memory Limit: 64 MB Submit: 2866 Solved: 1385 [Submit][Status][Discuss] Descriptionlxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a,

ywq12138的博客 311

P2572 [SCOI2010]序列操作(巨坑的区间合并)

P2572 [SCOI2010]序列操作 怎么说呢,这五个操作只要仔细想一想就可以写出来 最坑的地方在于pushdownpushdownpushdown一定要写在函数的开头因为再反转操作的时候一定要先将其子区间更新 另外要注意一下下标优先级 求最长区间的操作类似于这个题 HDU 5022 Yaoge’s maximum profit(树链剖分+区间合并+方向) #include <bits/stdc++.h> #define inf 0x7fffffff #define ll long long

lcl1234567890lcl的博客 184

BZOJ_1858_[Scoi2010]序列操作_线段树

BZOJ_1858_[Scoi2010]序列操作_线段树 Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1...

120

线段树 BZOJ1858 [Scoi2010]序列操作

1858: [Scoi2010]序列操作 Time Limit: 10 SecMemory Limit: 64 MBSubmit: 2773Solved: 1349[Submit][Status][Discuss] Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a...

weixin_30426065的博客 112

bzoj1858: [Scoi2010]序列操作

bzoj1858: [Scoi2010]序列操作 一道裸线段树。的确是比较好想,然而代码写得莫名丑,于是调了很长时间。 维护区间中1的总数,左起连续1的个数,右起连续1的个数,最大连续1的个数,0同理。更新的时候左起连续1(0)要考虑左区间全为1(0)延伸到右区间的情况,右起同理。最大连续考虑左区间的右连续+右区间的左连续情况。标记打区间填充和取反。

蒟蒻名曰Starria 925

【题解】Luogu P2572 [SCOI2010]序列操作

原题传送门:P2572 [SCOI2010]序列操作 这题好弱智啊 裸的珂朵莉树 前置芝士:珂朵莉树 窝博客里对珂朵莉树的介绍 没什么好说的自己看看吧 操作1:把区间内所有数推平成0,珂朵莉树基本操作 操作2:把区间内所有数推平成1,珂朵莉树基本操作 操作3:把区间内所有数取反(异或1),split后扫描一遍,值域取反 操作4:区间和,珂朵莉树基本操作 操作5:区间最长连续的1,暴力扫描...

weixin_30702887的博客 134

BZOJ 1858: [Scoi2010]序列操作 线段树

1858: [Scoi2010]序列操作 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 2956  Solved: 1432 [Submit][Status][Discuss] Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a

BlackJack 339

BZOJ1858: [Scoi2010]序列操作

1858: [Scoi2010]序列操作 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1031  Solved: 529 [Submit][Status] Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b

Oakley 458

SCOI 2010 序列操作

题目描述 lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0 3 a b 询问[a, b]区间内总共有多少个1 ...

204

bzoj 1858: [Scoi2010]序列操作

1858: [Scoi2010]序列操作 Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询问操作: 0 a b 把[a, b]区间内的所有数全变成0 1 a b 把[a, b]区间内的所有数全变成1 2 a b 把[a,b]区间内的所有数全部取反,也就是说把所有的0变成1,把所有的1变成0 3 a b...

weixin_30826095的博客 143
上一篇: SCOI2009windy数【数位dp】
下一篇: 3224普通平衡树——bzoj
SAuppp
博客等级 码龄12年 5粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值