Problem E Painting the Fence (区间染色)

C. Painting the Fence(思维 + 前缀和) You需要油漆一个由n个部分组成的长围栏。不幸的是,它没有被涂漆,所以你决定雇用q名画家来完成这项工作。如果你选择最优的q-2名画家,你希望最大化已经涂漆的部分数量。不幸的是,你的预算很紧,所以你只能雇用q-2名画家。显然,只有你雇用的画家才会完成他们的工作。接下来有q行,每行描述其中一位画家:第i行包含两个整数li和ri (1 阅读详情

https://codeforces.com/gym/101911/problem/E

题意

n个数,每个数都代表一种颜色,m个操作,每个操作给出一个颜色col,要求将[最左边的col,最右边的col]这个区间都染成col。输出最终序列的颜色。

题解

关键点: 每种颜色只需要操作一次!!!

因为每种颜色第一次绝对是覆盖最多的,下次同样的操作不可能再覆盖更多的地方。 所以一旦覆盖,这个区间其实就可以缩成一个点来代替了。

set<int> g[i]: 记录颜色i的所有位置。

对于已经操作过的颜色直接跳过,否则直接找到最左最右,将这区间内的颜色的位置在对应的颜色set里删除。然后记录下这个颜色覆盖的区间即可。即nxt[l] = r+1。

最后遍历1~n,对于[l,nxt[l])之间的输出一个颜色即可。
每个位置只会操作一次,时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)

代码

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;

const int maxn = 3e5+5;
set<int> g[maxn];
int nxt[maxn];
int n;
int a[maxn], vis[maxn];

void del(int l,int r) {
	for(int i = l+1; i <= r; i = nxt[i]) {
		g[a[i]].erase(i);
	}
}
int main() {
	scanf("%d", &n);
	int col;
	for(int i = 0; i < n; ++i) {
		scanf("%d", &a[i]);
		g[a[i]].insert(i);
		nxt[i] = i+1;
	}

	int m;
	scanf("%d", &m);
	for(int i = 0; i < m; ++i) { 
		scanf("%d", &col);
		if(vis[col] || g[col].size() < 2) continue;
		vis[col] = 1;
		int l = *(g[col].begin());
		int r = *(g[col].rbegin());
		del(l,r);
		nxt[l] = r+1;
	}

	for(int i = 0; i < n; i = nxt[i]) {
		for(int j = i; j < nxt[i]; ++j)
			printf("%d ",a[i]);
	}
	puts("");
	return 0;
}
VisionPro开发实战:CogRecordDisplay控件显示与保存图片的完整流程(附C#代码示例) 本文详细解析了VisionPro开发中CogRecordDisplay控件的图像处理全流程,包括图像加载、显示优化、动态清屏及结果保存等关键操作。通过C#代码示例,展示了如何高效使用该控件进行工业视觉应用开发,特别适合自动化检测系统的开发者参考。 阅读详情

相关推荐

实现单芯片2400bps 音频编解码方案

终于按照朋友的需求,帮他开发了一款单芯片集音频采集编码传送并接收解码播放功能的方案,交给快递公司邮寄给远在郑州的他.整个项目从开始定型到现在一个样机送出,整整花了1个月时间,感觉挺有成就感,挺有意思,工作是辛苦的,结果却是快乐的.现在将这中快乐的的心情与大家分享一下.    真个项目用一颗主控搞定,ARM9的,200KBytes 片内RAM,主频可以跑到300MHz,64pin LQFP封装

nyxsec的专栏 3682

Painting the Fence(离散化)

Painting the Fence(离散化) Main Title 题目描述 Farmer John has devised a brilliant method to paint the long fence next to his barn (think o...

VUno)UKGzseI 561

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文详细介绍了秦时明月6.2魔改版的从零到一部署指南,包括环境准备、服务端安装、安卓客户端配置以及GM后台直通等关键步骤。特别针对安卓客户端配置和GM工具使用提供了实用技巧,帮助用户快速搭建并优化游戏服务器,确保稳定运行。

weixin_42522964的博客 315

C. Painting the Fence (前缀和 思维)

C. Painting the Fence You have a long fence which consists of n sections. Unfortunately, it is not painted, so you decided to hire q painters to paint it. i-th painter will paint all sections x such ...

Suprit's blog 794

OpenAI Codex 国内安装配置全攻略:从零到实战的 AI 编程助手集成指南

AI 编程助手正成为提升开发效率的关键工具,其核心原理是基于大规模语言模型对代码语义进行深度理解与生成。这类技术通过将自然语言指令转化为可执行的代码、自动化重构与调试,为开发者提供了智能化的结对编程体验,其技术价值在于显著降低编码复杂度、加速项目迭代。在实际应用场景中,AI 编程助手可集成于日常开发流,辅助完成代码生成、项目分析与自动化任务。本文聚焦于 OpenAI 的 Codex,针对国内开发者在网络、认证和配置上的常见挑战,提供了涵盖多种安装方式、详细配置步骤及核心使用技巧的实战指南,并特别介绍了如何利

weixin_28715081的博客 410

基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例

本文实验采用公共数据集Ninapro。该数据集数据量大,采集的动作丰富,每个单位数据集里面包括表面肌电信号、加速度计、手部运动学和动态数据等,记录了67名完整受试者和11名进行了至少50 次手部运动的截肢者的数据。NinaproDB1数据集包括27名完整的受试者(7 名女性和20名男性,其中2个左手和25 个右手) 的肌电信号。信号采集频率为100Hz。

树下一朵云的博客 2295

C. Painting the Fence(暴力)

You have a long fence which consists of

cherish_lin的博客 1460

YOLO11全网首发:CVPR2026 MixerCSeg | DEGConv方向引导边缘门控,破解细长裂缝检测难题

DEGConv通过方向先验嵌入、边缘增强卷积和动态门控三大机制,针对性解决了YOLO在处理裂缝类细长、多方向、低对比度目标时的特征提取不足问题,显著提升了裂缝检测的精度与鲁棒性。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 560

前缀和思想

这道题是一个十分巧妙的前缀和思想的题目 题目如下 题目传送门-----CF1132C Painting the Fence 墙长为n,q个工人,每个工人固定粉刷一个区间,区间可能重叠,现在要去掉两个工人,求剩下q-2个工人最多粉刷多少墙。(3≤n,q≤5000 ) (1 ≤ l i ≤ r i ≤n)。 那么对于这道题来说通过观察数据我们就知道需要用n^2算法,而又知道这个需要找到两个去除的小画家,所以说我们需要用到类似于冒泡排序的枚举思想。 pim数组存放的是我们去除i这个小画家以后,剩下的作画区间剩余数

m0_51841071的博客 554

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 171

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks6.9 + Workbench3.3的安装部署,以及简单示例项目的创建、编译和运行

Mr.Sugarcane 5455

Painting the Fence(差分数组+前缀和)

链接:Painting the Fence 题意: 给一个n,一个q n代表墙的宽度(米),q代表油漆工的人数 给q对数字,分别代表第i个油漆工刷墙的范围 l[i]~r[i] 只能选q-2个油漆工,问最多可以刷多少米的墙 解析: 用差分数组算出所有油漆工的刷墙效果,遍历每个油漆工(i),减少他刷的范围(-1),用前缀和计算他的范围内有多少个等于1 遍历每个油漆工(j),(i!=j...

wangtao的博客 643

安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案

本文主要介绍了安装WSL过程中出现注册表编辑器无法重命名WSL。重命名项时出现错误的解决方案,希望能对使用Windows WSL的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 9万+

CF1132C:Painting the Fence(暴力)

C. Painting the Fence time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You have a long fence which consists ofnnsections. Unfort...

junior19的博客 904

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

E. Painting the Fence

http://codeforces.com/gym/101911/problem/E 题意:给n个初始颜色,m次涂色,每指定一种颜色这种颜色最左到最右染色,问最后的颜色序列; 思路:(1)对每种颜色维护他的下标,每次染色将区间内的下标除去;如果有颜色已经染过就直接跳到该颜色最右;(已经染色过的他的区间内的下标已经清除了所以这个区间必然是被包含的); (2)线段树; ...

newhonor 526

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

E. Painting the Fence——东二(双端队列,区间线段树)

题目地址:http://codeforces.com/gym/101911/problem/E 这是一道好的算法组合题,涉及线段树以及双端队列。 做完这道题,先写收获: 1、差分树状数组(用于区间修改)不能处理区间统一换成数值v的问题(对我而言),只能简单的用作区间加减乘除运算。 2、在维护线段树区间的元素的数量的时候,以及其他统计运算的时候,最优思想不应该是将统计元素数量(以及其他需求)整合到...

KineXence的博客 328

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

#256 C. Painting Fence 分治

C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output Bizon the Champion isn't just attentive, he also is

vickey 1217

[USACO13JAN]Painting the Fence【扫描线】

Pro Luogu2205 Sol 表示自己独立想不到这个解法…… 所谓扫描线,就是不断地移动,移动到一条线段的左端点时+1+1+1,移动到右端点时−1−1-1。我们用nownownow表示覆盖的有多少条线段,把每一个区间按照坐标排好序之后,如果发现满足我们的条件,就直接加上两个点之间的点的数量。 Code #include&lt;iostream&gt; #include&l...

曹老师 840

离散-洛谷P2205 [USACO13JAN]画栅栏Painting the Fence

https://daniu.luogu.org/problem/show?pid=2205 本来要抄题解的 ,结果发现搜不到; …. 其实就是一个离散化; 假如现在的点是now; 要向右移动x个单位; 我们直接在now的地方+1; 在now+x的地方-1; 就好了; 然后排序判重乱搞; 要注意它是一个单位长度是一个栏栅; 所以2个点组成一个栏栅; #...

weixin_30548917的博客 228

Painting the Fence

You have a long fence which consists of n sections. Unfortunately, it is not painted, so you decided to hire q painters to paint it. i-th painter will paint all sections x such that li≤x≤ri. Unfortuna...

slass-mot-odet 396

Painting the Fence-差分+前缀和

题目传送门 #include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include&lt;vector&gt; #include&lt;set&gt; #include&lt;stack&gt; #include&lt;queue&gt; #include&lt;map&gt; #incl

我们花时间收集,却忘了最重要的其实是花时间去消化 612

Codeforces 448C:Painting Fence 刷栅栏 超级好玩的一道题目

C. Painting Fence time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output Bizon the Champion isn't...

weixin_33738555的博客 436

Room of Windows【翻译】

TABLE OF CONTENTS Page Acknowledgements…………..………………………………………….…..iii PART I MORE FLAME THAN MARBLE: POETRY AND THE COLLABORATIVE PROCESS……………………………………………………………………………………….1 References………………………………….…………...

hongfu951的专栏 460

Count Color(线段树区间染色)

题目链接: Count Color 大致题意 有n个位置, 从1~n标号, 有两种操作: ​ ① C l r c 把区间[l, r]染色为c ​ ②P l r 询问[l, r]区间有多少种颜色. 解题思路 线段树区间染色 我拿到这题后, 这题不是傻逼题吗? 然后写了3h 其实以前我是有博客写过关于线段树区间染色问题的, 博客链接我们只需要用一个懒标记表示当前区间是什么颜色即可, 每次更新的时候, 我们都下放懒标记, 查询的时候不需要下放懒标记. 那么这个题我为什么做了这么久呢? (原因是网上的博客的写法都和

Fau的博客 1261

CF 1132 problem_C:Painting the Fence(暴力枚举+差分处理)

题意是给出一段长为n的序列,给出q个连续子序列,让你选择其中q-2个子序列,求覆盖的最大范围是多大。 一开始想贪心,每次选最长的,然后判断一下覆盖相交的情况。但题目没有要求你覆盖的范围一定是连续的,不要求连续的话子序列选择情况和判断比较复杂,所以贪心思路就直接丢弃了。一看只要选q-2个,2个不选,那就枚举哪两个2不选。 然后就被怎么处理卡住了,首先想到用差分算出每一个点被覆盖多少次,然后枚举两个子...

qq_41997978的博客 299

1746. 【usaco 2013 feb Bronze】粉刷栅栏(Painting the Fence)

1746. 【usaco 2013 feb Bronze】粉刷栅栏(Painting the Fence) 题目: 农夫约翰最近正在将他的栅栏粉刷一下(这里所有的栅栏都是在一条直线上的)。他是这样来粉刷的:他从位置0出发,然后执行N条指令,例如,指令可以是“10 L”,表示约翰从当前的位置向左移动10个单位的距离,并且粉刷移动过程中遇到的栅栏,又或者是“15 R”,表示约翰从当前的位置向右

JZ2017chenjingtao的博客 1506
上一篇: Problem G Ray in the tube(思维)
下一篇: SPOJ COT 树上第k小
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值