首页 > 其他分享 >做题随笔:P10465

做题随笔:P10465

时间:2025-01-13 22:44:26浏览次数:1  
标签:P10465 随笔 下标 递减 相等 排序 include 单调

Solution

这里是博客:Tenil,刚刚用上了 JS,不妨看看?

题意

原题链接

给定数列 \(a_N\),按以下要求分为 \(n\) 组:

  1. 每组中的数单调不降。
  2. 每组中的数在原数列中的下标单调递减/单调递增/先递减再递增。(思考一下双向队列插入值的过程显然有:越往两端的越后入队)
  3. 存在一种方法,使所有分组拼接后整体单调不降。

求最小的 \(n\)。

分析

题目要求最终序列不降,所以断不可以按照输入顺序处理(所以 Sherry 才觉得棘手呢)。为什么呢?考虑一下样例:

3 6 0 9 6 3

如果直接按照输入顺序接,显然可以有分组方法: \([0,3,6,9],[3,6]\),不满足要求 \(3\)。其实就是在不知道所有数的情况下,可能把 \(l,r,mid(l < mid < r)\) 的 \(l,r\) 和 \(mid\) 分在了两组,导致无解。

为了避免无解的情况,一个很明显的策略是把所有数读入不降序排序后再处理,于是要求 \(1\) 和 \(3\) 容易满足,接下来问题就在要求 \(2\):为了满足下标的要求,在排序时记录下标,按排序后的顺序逐位验证要求 \(2\),不满足则 \(n\gets n+1\) 即可,数据处理流程如下:

3 6 0 9 6 3\\初始数据
0 3 3 6 6 9\\排序后
3 1 6 2 5 4\\下标,验证此数组计数

还需注意两个小问题:

  1. 初始按照什么单调性来?

    一个完整的队列应是先递增再递减的,所以初始状态应为递减。

  2. 相等的数怎么处理?

    相等的数是完全初下标外等价的,相当于可以任意交换,而且一定要放在一组(不然无解或可能不是最小),故相等的数下标自身须有序,即相等的数放在一起,排序后考虑。而内部有序,其实最终只需考虑端点值即可。

3 [1 6] [2 5] 4\\相等的数一起考虑

实现

全部读入,记录下标后升序排序,全部扫一遍,相等的放一起记录端点值,转化为拼接区间。变量记录当前单调性,拼接时:还满足则继续,不满足则反转单调性,当转为递减时队列数增加一。

Code

#include <iostream>
#include <cstdio>
#include <cctype>
#include <algorithm>

using namespace std;

typedef long long ll;

inline ll fr() {
	ll x=0,f=1;char c=getchar();
	while(!isdigit(c)) {
		if(c=='-') f=-1;
		c=getchar();
	}
	while(isdigit(c)) {
		x=(x<<1)+(x<<3)+(c^48);
		c=getchar();
	}
	return x*f;
}

const int maxn=2e5+1000;

struct node {
	ll x,tag;
}num[maxn];
struct intva{
	ll l=1145141919,r=-1145141919;//这个初始值还没炸过(笑)
}qu[maxn];
ll n,ans=1;
bool down=true;

inline bool cmp1(node n1,node n2) {return n1.x<n2.x;}

int main() {
	n=fr();
	for(register int i = 1; i <= n; i++) {num[i].x=fr();num[i].tag=i;}
	sort(num+1,num+1+n,cmp1);
	ll now=num[1].x,cnt=1;//记得初始化
	qu[1].l=num[1].tag;qu[1].r=num[1].tag;
	for(register int i = 2; i <= n; i++) {
		if(num[i].x!=now) {
			now=num[i].x;
			cnt++;
			i--;//就是换一个区间重新来
		}
		else {
			qu[cnt].l=min(qu[cnt].l,num[i].tag);
			qu[cnt].r=max(qu[cnt].r,num[i].tag);
		}
	}
	for(register int i = 2; i<= cnt; i++) {
		if(down) {
			if(qu[i-1].l<qu[i].r) {
				down=false;
			}
		}
		else {
			if(qu[i-1].r>qu[i].l) {
				down=true;
				ans++;
			}
		}
	}
	printf("%lld\n",ans);
	return 0;
}

后话

感觉有用,还请点个赞吧!

标签:P10465,随笔,下标,递减,相等,排序,include,单调
From: https://www.cnblogs.com/Tenil/p/18669559

相关文章

  • 算法随笔2:无重复字符的最长子串
    题目是这样的:给定一个字符串s,请找出其中不含有重复字符的最长子串的长度。例如:s="abcabcbb",答案:3。因为不含有重复字符的最长子串为"abc"。我们可以这么考虑这个问题。最终的答案的起始字母必然是字符串s里的其中一个字母。这句话听起来像是一句废话。但有时往往一道算......
  • 2025年1月10日随笔
    公司人员调整,从个人发展而言确实缘分尽了,努力奋斗了三年。自己也看不到最后的理想结局,青春终究是怀有遗憾的。收拾心情,开始准备接下来的招聘了。在这家公司主要是sass以及APP内嵌H5产品的成长,确实不是自己最合适的路子,自己在这家公司也是磨练综合能力为主。接下来要突破的事情......
  • 随笔:我为什么没有把《P5369 [PKUSC2018] 最大前缀和》做出来
    这是一篇随笔(绝对不是某CC风格的随笔)特别提醒:某W同学,再被【数据删除】要求写【数据删除】时你可以看一看这个大纲。我在干什么我在考【数据删除】时,开完题目后,我断定我就要解决这一道题。看见\(20\)这个小范围以后我就想起上一把【数据删除】的T【数据删除】。我就想DP......
  • 第三届智能决策论坛|决策大模型专题报告——随笔(1)
    前言这次汇报的有四位老师,其中我比较感兴趣的是上海交通大学张伟楠老师、北京大学梁一韬老师和清华大学高宸老师的报告,其中张老师之前已经记录过,本文主要作为对梁一韬老师的分享的记录与思考。CRAFTJARVIS:TowardsGeneralistAgentsinanOpenWorldMotivation研究趋势:构......
  • 数字信号处理上课随笔1
    FFT$基2-FFT算法$分裂基算法ps.基-2FFT是分裂基的一个特殊情况【例】清华大学的一个专利提到了3780点DFT,按照常见思维,首先会选择补零至4096个点,并进行基2-FFT,但其实工程中要尽量减少计算量,缩短时间,清华大学采取了分裂基的方法。数字信息传输方法及其地面数字多媒体电视广播......
  • 开发随笔:身份证校验码
    身份证校验码的计算方法如下:将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7910584216379105842将这17位数字和对应的系数各自相乘的结果相加;用加出来的和除以11,看余数是多少;余数只可能是012345678910这11个数字中......
  • 学习随笔:nvidia分析工具与数据降维、坐标系、反馈环节
    昨天无意中刷到了此网页:NVIDIA分析工具的用户手册VisualProfiler是一种图形分析工具,可显示应用程序的CPU和GPU活动的时间轴,并包括一个用于识别优化机会的自动分析引擎。nvprof分析工具,可以从命令行收集和查看分析数据。NVIDIANsightSystems整合了VisualProfiler......
  • 2024年12月总结及随笔之1T资料灭失
    1. 回头看日更坚持了731天。读《数据质量管理:数据可靠性与数据质量问题解决之道》更新完成读《图数据库实战》更新完成读《数据保护:工作负载的可恢复性》开更并持续更新2023年至2024年12月底累计码字1834939字,累计日均码字2510字。2024年12月码字96819字,同比上升34.49%,......
  • 【C#随笔】封装一下NativeMemory类
    终于,主播也是用上博客园了,可喜可贺来博客园不能不发文章,所以主播没事干先发个一篇看看实力.NET6的时候引入了一个新类,叫NativeMemory,里面提供了AllocFree等方法作为malloc和free的包装想当年我写非托管内存的时候都是Marshal类起手,居然写了这么久才发现早就有了这玩意,那不得封......
  • 随笔-处理器微架构-测量最大IPC
    目录固定cpu运行频率max_ipc_test.shLSD(LoopStreamDetector)arm固定cpu频率方式固定cpu运行频率我的测试环境cpu频率管理是intel_pstate:$lscpu|grep-ihzModelname:Intel(R)Core(TM)i5-10500CPU@3.10GHzCPUmaxMHz:......