Painting the Fence-差分+前缀和

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

题目传送门

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<stack>
#include<queue>
#include<map>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

typedef long long LL;

#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define mem(a,b) memset(a,b,sizeof(a))
#define per(i,a,b) for(int i = a;i <= b;++i)
#define rep(i,a,b) for(int i = a;i >= b;--i)
const int maxn = 3e5;
int n = 0,q = 0;
struct node{
	int l,r,size;
};
node a[maxn+10];
int tot = 0;
int num[maxn+10];
int times[4][maxn+10];//times[1][j]表示从1-j,fence只被涂一次色的个数
//times[2][j]表示从1-j,fence只被涂一次色的个数,
bool cmp(node x,node y){
	return (x.l == y.l) ? (x.r < y.r) : (x.l < y.l);
}

int f(int x,int y){
	if(a[x].r < a[y].l){//分类讨论 
		return (times[1][a[x].r] - times[1][a[x].l-1]) + (times[1][a[y].r] - times[1][a[y].l-1]);

	}else{
		int res = 0;
		res += (times[1][a[y].l-1] - times[1][a[x].l-1]  +  times[1][max(a[x].r,a[y].r)] - 
		times[1][min(a[x].r,a[y].r)]);
		res += (times[2][min(a[x].r,a[y].r)] - times[2][a[y].l-1]);
		return res;
	}
}
void solve(){
	int ans = 0;
	per(i,1,q){
		per(j,i+1,q){
			int sum = f(i,j);//要删去的点 
			if(tot - sum >= ans){
				ans = tot - sum;
			}
		}
	}
	printf("%d\n",ans);
}
int main(){
	while(~scanf("%d %d",&n,&q)){
		memset(num,0,sizeof(num));	memset(times,0,sizeof(times));
		tot = 0;
		int r = 0;
		a[0].r = a[0].l = 0;
		per(i,1,q){
			scanf("%d %d",&a[i].l,&a[i].r);
			a[i].size = a[i].r - a[i].l + 1;
			++num[a[i].l]; --num[a[i].r+1];//差分 
		}
		per(i,1,n){//求每个点的值 
			num[i] += num[i-1];
		}
		per(i,1,n){
			times[1][i] = times[1][i-1] + ((num[i] == 1) ? 1 : 0 );
		}
		per(i,1,n){
			times[2][i] = times[2][i-1] + ((num[i] == 2) ? 1 : 0 );
		}
		
		sort(a+1,a+1+q,cmp);//排序便于分类讨论 
		
		tot = a[1].size;//计算总共有多少个点被涂 
		int l = a[1].r;
		per(i,2,q){
			if(a[i].l > l){
				tot += a[i].size;
				l = a[i].r;
			}else{
				tot += max(0,a[i].r - l);
				l = max(a[i].r,l);
			} 
		}
		
		solve();
	}

	
	return 0;
}
题解:AtCoder AT_awc0089_e Painting the Fence 等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。高桥希望通过最优地选择要忽略的指令区间,来最大化最终被粉刷的木板数量。求最终被粉刷的木板的最大数量。(含端点)的所有木板"。如果一块木板被多个指令粉刷,它的最终状态与只被粉刷一次相同。个连续的指令,使得最终被粉刷的木板数量最大化。个指令(不执行它们),并执行所有剩余的。,初始时所有木板都没有被粉刷。本文分享的必刷题目是从。 阅读详情

相关推荐

zynq+LWIP 裸机双网口实现(MIO+EMIO)+程序下载

芯片型号: ZYNQ: XC7Z010clg400开发软件:Vivado2022 + Xilinx Vitis 2022网卡芯片:RTL8211FDI(需要根据网口芯片型号修改对应的硬件配置代码。

thinking in 小宇宙 3404

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

面板数据门槛归回分析,xthreg的安装,xthreg2安装包

我用的是Stata17,数据是不平衡的面板数据,需要用到xthreg2,虽然我找到了xthreg2.ado,但是还需要安装xthreg,因为运行xthreg2需要xthreg包顺带安装的lxthreg.mlib文件。但是!我后来发现还是不行,最后是去买了一个真正能用到xthreg2的lxthreg.mlib文件,才可以运行。

weixin_55252589的博客 1万+

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

卡尔曼滤波与目标追踪

卡尔曼滤波与目标追踪为什么要学卡尔曼滤波?卡尔曼滤波是什么?一些概率论的知识基础卡尔曼滤波完整推导状态估计计算卡尔曼增益预测和更新 卡尔曼滤波部分我打算分三节(三次博客的内容): 卡尔曼滤波与行人状态估计 扩展卡尔曼滤波(EKF)与传感器融合 过程模型,无损卡尔曼滤波(UKF)与车辆状态轨迹 为什么要学卡尔曼滤波? 卡尔曼滤波以及其扩展算法能够应用于目标状态估计,如果这个目标是行人,那么就是行人状态估计(或者说行人追踪),如果这个目标是自身,那么就是车辆自身的追踪(结合一些地图的先验,GPS等数据的话就

qq_43232556的博客 4170

【kubernetes】kubernetes kubeadm init 错误了 怎么回退?

因为虚拟机设置问题首先报错:然后我根据文章修改了核数。重启后,查看VIP运行所在机器,发现机器没有变化然后重新执行初始化后面报错了根据提供的信息,问题主要集中在 kubelet 未能成功启动控制平面组件,导致初始化过程超时。以下是可能的原因及相应的排查步骤:原因 1:kubelet 未运行或运行状态异常正如错误提示所指出,kubelet 可能未运行或处于不健康状态。请按照提示执行以下命令检查 kubelet 的状态和服务日志:根据输出结果,判断 kubelet 是否正常运行。后续一大堆错误。

九师兄 121

C. Painting the Fence(暴力)

You have a long fence which consists of

cherish_lin的博客 1460

卫朋:IPD流程落地之产品开发验证阶段解读

IPD验证阶段

产品线负责人 1485

Painting the Barn 2 (最大子矩阵)

测试链接 题面: Farmer John is not good at multitasking. He gets distracted often, making it hard to complete long projects. Currently, he is trying to paint one side of his barn, but he keeps painting smal...

冰柠橙的博客 964

FPGA设计-Vivado的Off-Chip Termination设置问题

经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终端匹配怎么设置,Vivado的Off-Chip Termination设置问题,这里就详细说一下这个问题。

whm128的博客 2722

GaussDB本地安装手册(主备模式)

如果实例状态是Normal,则安装成功。三节点集中式配置文件。

Sebastien23的博客 2632

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

Android 12 大屏时底下显示任务栏以及虚拟按键靠右问题

Android 12 点大屏时,底下导航栏变成显示任务栏,虚拟按键靠右的分析以及修改

Android系统开发笔记 4685

CodeForces1132 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 th...

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 606

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

(CodeForces) C. Painting the Fence

传送门 解题思路:就是枚举放弃的两个区间,直接是肯定爆炸的,但是我们差分和前缀和预处理一下就行了 #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const int maxn=1e4 + 5; int n,q,sum[maxn],num[maxn]; int l[maxn],r[maxn]; i...

一只不争气的蒸汽机的博客 314

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

qq_41997978的博客 299

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化

题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大。 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势。 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数。然后打到一半,就发现想法有问题。 这道题正解就是简单的前缀和,或者DP。 我为了更加深入理解,两种方法都试了试。 前缀和版本: 由于题目给的范围是5000,明显支持N^2,于...

qq_40921866的博客 147

1132C - Painting the Fence(思维+差分)

https://codeforces.com/problemset/problem/1132/C 思路:可以发现n^2枚举。 对于去除第一个人后序列的状态,可以O1用差分修改出来。然后On累加。 去除第二个人后序列的答案怎么算。可以发现去除第二个人后对其所在的[l,r]区间内还剩涂了一次的状态去除掉就好了。所以前缀和统计一下只有一个覆盖情况的。 差分维护好扫一遍处理好前缀,然后On枚举。 #include<iostream> #include<vector> #inclu

代码笔记本 167

Educational Codeforces Round 61 (Rated for Div. 2) C. Painting the Fence(思维+前缀和)

题目链接:http://codeforces.com/contest/1132/problem/C 题意是有n个点,m条线段,问用m-2条线段最多可以覆盖多少个点。 思路就是暴力枚举,但是虽然数据范围不大,但是太暴力也还是过不了的,所以我们可以用前缀和去优化把查询的操作变成O(1)的查询,我们首先记录一下这n个点有多少个点被覆盖了(变量为tot),然后m^2去...

Charles_Zaqdt的博客 238

Educational Codeforces #61 (Div. 2) C. Painting the Fence (前缀和)

题目: https://codeforces.com/problemset/problem/1132/C 参考了http://www.pianshen.com/article/4932273340/ 这位巨巨的代码 思路非常清晰,没什么好说的了 自己太菜了 疯狂wa #include<cstdio> #include<cstring> #include<cmath&...

Verymuch 206

常用算法代码模板与题单 | A - 基础算法(更新于2026.10.7)

这篇文档其实是我自己学习路上的一份“复习笔记”。之前看了不少教程,零零散散记了一堆代码片段和小技巧,时间久了就容易忘,翻起来也麻烦。所以干脆花时间整理了一下,把常用的模板、容易踩的坑、还有一些个人觉得挺实用的小技巧都归到了一起。 如果你也在学类似的东西,或许能帮你省下一些翻找的时间;如果有哪里写得不清楚或不对,也欢迎随时指正交流。 希望这份整理也能对你有一点点帮助~ ✨

团爸讲算法 803

AtCoder Weekday Consest 赛情分析及题解 | 汇总(更新至 AWC 0129 Beta)

我把自己练习过的AtCoder AWC题目都整理了一下。虽然网站上有许多高手的解法,但因为我自己也是初学者,所以只用了比较容易理解的方法来分析和解答。如果你也在学习的话,希望这些内容能对你有一点帮助。

团爸讲算法 1048

洛谷 P5542 Painting the barn(二维差分 模板)

题目大意: 小明对着墙壁画矩形,问小明画的矩形里面重叠k次的区域面积是多大。 解题思路: 首先,我们可以想到对画的一片区域进行+1操作,最后扫描一遍画的区域,若某个点的和为k我们就记录下来。 首先,我们可以试一下naive的+1,发现复杂多太高。这时候引入一个新结构叫做二维差分,二维差分再配合二维前缀和就可以达到O(n^2)的更新一片区域。关于二维差分,这里有一个解释: https://...

FrostMonarch的博客 714

【基础算法】前缀和、差分

前缀和与差分的核心思想都是都是用空间换时间的做法。

2301_80361697的博客 1660

Painting the Barn(二维前缀和,二维差分)

Painting the Barn(二维前缀和,二维差分) 题目传送门 Painting the Barn 题目大意 在一个二维平面上,给你n个矩阵,每个矩阵给你左下角和右上角的点,代表矩阵覆盖的面 求被覆盖了k次的面积 思路 二维前缀和, vis[i][j]+=vis[i−1][j]+vis[i][j−1]−vis[i−1][j−1];vis[i][j]+=vis[i-1][j]+vis[i][j-1]-vis[i-1][j-1];vis[i][j]+=vis[i−1][j]+vis[i][j−1]−vi

Kuricip的博客 749
上一篇: 树形DP-Apple Tree
下一篇: 最小区间覆盖-贪心-牛客小白月赛60A-华华听月月唱歌
Mavis code
博客等级 码龄9年 13粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值