首页 > 其他分享 >洛谷P8551 Bassline 题解

洛谷P8551 Bassline 题解

时间:2022-09-29 15:25:03浏览次数:116  
标签:P8551 int 题解 Bassline cnt 区间 长条

P8551 Bassline 题解

分析

这道题做月赛的时候想了好久,最后发现其实很简单。

我们用样例数据来分析:

如图所示,我们将每个区间抽象化为一个一个的长条。题目给我们的两个要求可以理解为 \([x,y]\) 所覆盖的列中没有任意一个长条开始或结束,如图中第 4 列就是绿色长条的开始部分,第 7 列就是绿色长条的结束部分,它们都不满足要求,所以 \([x,y]\) 不能包含这两列。

理解到这里了,这道题就很简单了:我们只需要用有长条开始或者结束的列将最大区间分成几个部分(如下图),取区间长度减一乘以区间内的长条数的最大值即 \(k-(y-x)\) 就行了。

思路

我们使用一个数组存储每一个数(即上面分析时所说的列)是多少个区间的起点和终点,我用的是结构体 x[i] ,当然你也可以用两个数组解决。对于读入的每个区间 \([l_i,r_i]\) ,我们让 x[li].geb++,x[ri].end++ ,并且存储最左边的点 left 和最右边的点 right

接着,我们从 left 循环到 right ,用 cnt 来记录能被选择的 \([x,y]\) 区间中的元素个数(即 \(y-x\) ),每当遇到一个区间的开始或结束就将 cnt 清零,再用 k 记录每一个数上的区间个数,每次用 cnt*k 跟答案比较取最大值就好了。

程序

#include<bits/stdc++.h>
using namespace std;
int n;
struct Node
{
	int beg=0,end=0;
}x[300005];//使用结构体存储每个数字是多少个区间的起点和终点
int main()
{
	scanf("%d",&n);
	int left=300005,right=-1,k=0,cnt=0;
	for(long long i=1;i<=n;i++)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		x[l].beg++,x[r].end++;//区间[l,r]开头和结尾的数字的起点个数和终点个数分别+1
		left=min(l,left);
		right=max(right,r);
	}
	long long ans=0;//一定记得开long long,不然最后一个点会炸
	for(int i=left;i<=right;i++)
	{
		++cnt;//记录这个可选区间中y-x的值
		if(x[i].beg || x[i-1].end)
			cnt=0;//如果i是某个区间的起点或者终点就将cnt清零
		k+=x[i].beg;//用k记录i上的区间个数
		ans=max(ans,cnt*k);//取最优解
		k-=x[i].end;
	}
	printf("%lld\n",ans);
}

标签:P8551,int,题解,Bassline,cnt,区间,长条
From: https://www.cnblogs.com/if-OF/p/P8551.html

相关文章

  • 牛客考试7605T2 牛牛的猜球游戏 题解
    2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解目录2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解比赛链接题目题目描述输入格式输出格式样例样例......
  • 洛谷 P7861 SAVEZ 题解(哈希)
    2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解目录2020牛客杯NOIP赛前集训提高第一场T2牛牛的猜球游戏题解比赛链接题目题目描述输入格式输出格式样例样例......
  • 题解【CF1632E1 Distance Tree (easy version)】
    CF1632E1DistanceTree(easyversion&hardversion)解题报告。不一定更好的阅读体验。E2没有地方交了所以就交到E1了。震撼挺大的一道题,钦定\(1\)为根。先......
  • 数据库复制订阅问题解决脚本
    --查列表select*frommsdb.dbo.MSdistpublishersDELETEFROMmsdb.dbo.MSdistpublishersselect*frommsdb.dbo.MSdistpublishers--增加execsp_droplinkedsrvl......
  • 【题解】P3225 [HNOI2012]矿场搭建(割点,dfs)
    【题解】P3225[HNOI2012]矿场搭建割点好题!(因为刚开始没想清楚卡了好久/kk)题目链接P3225[HNOI2012]矿场搭建题意概述给定一张\(n\)条边的无向图,现在要求在其中一......
  • CF1182E 名字太长不想打 题解
    题解区都是用矩阵直接算封闭形式中\(f_1,f_2,f_3\)的系数的,这里给个更偏MO风格的做法。首先先想办法用\(f_x\cdotk(x)\)代\(f_x\)以消掉\(c^{2x+6}\)这个不好......
  • 【Python】【爬虫】【问题解决方案记录】调试输出存在数据,print在控制台确丢失数据
    如下图,调试可以看到数据是完整的但是print输出的,恰好丢失了中间的一大堆数据。对,下图打问号的地方应该是小说才对。看代码可能看不出缺失内容,可视化看看对吧,......
  • Mac M1 安装 Nacos 操作及问题解决
    nacos依赖mysql先安装mysql,这里使用的是8+版本,原因在于原本的5.7版本中并没有对m1的良好支持,如果启动会有报错说查询不到对应版本信息(虽然可以通过自定义mirror......
  • USACO 2022赛季 简要题解
    DECGOLD-A-PairedUpG有\(n\)只奶牛,第\(i\)只在位置\(x_i\),有重量\(y_i\)。求在满足匹配要求的情况下,非匹配的奶牛的重量之和的最大/最小值。两只奶牛能......
  • 移动端touch拖动事件和click事件冲突问题解决
    通过一个悬浮球交互功能的案例来阐述问题,以及解决办法。实现效果类似微信里的悬浮窗效果,苹果手机的悬浮球功能效果可以点击拖动,然后吸附在窗口边缘点击悬浮球,可......