首页 > 其他分享 >暑假集训D9 2023.8.2 补题

暑假集训D9 2023.8.2 补题

时间:2023-08-02 20:36:26浏览次数:32  
标签:2023.8 排序 int maxv cin 补题 D9 include 指针

A.「EZEC-10」排列排序

给你一个长度为 \(n\) 的排列 \(p_1,p_2, \cdots ,p_n\)。你需要把它排序。

每次可以花区间长度,即 \(r-l+1\) 的代价,选择排列中的任意一段区间 \([l,r]\),并将 \([l,r]\) 从小到大排序。

现在你可以让他进行若干次这个操作,直到 \(p\) 中元素的值从 \(1\) 到 \(n\) 按升序排序,即对于 \(1\) 到 \(n\) 的每一个 \(i\),都有 \(p_i=i\)。

求问花的代价最少为多少?

\(\operatorname{Solution:}\)

比赛时想了个加做法,两个指针从两边逼近,找到第一处 \(a[i]!=i\) 的,然后对中间这个大区间计算排序花费.但是容易找到反例
2 1 3 5 4,按上面的做法答案是 \(5\) ,但实际上只需要把 2 15 4 单独排序即可,花费为 \(4\) .

题解的方法是:
先让左指针尽量右移,然后让右指针从左指针的下一个位置开始,不断更新左右指针之间的最大值 \(maxv\) ,当右指针指到了 \(maxv\) 的下标位置时实施交换.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define endl '\n'
#define pb push_back
using namespace std;
typedef pair<int,int> PII;
const int N = 1e6+10;
int a[N];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
		}
		int l = 1;
		int res =0 ;
		while(l<=n)
		{
			while(l<=n&&a[l]==l) l++;
			if(l>n)break;
			int r = l;
			int maxv = a[l];
			while(r<n&&r!=maxv){
				
				r++;
				maxv = max(maxv,a[r]);
				
			}
			res+=r-l+1;
			l = r+1;
		}
		cout<<res<<endl;
	}
	return 0;
}

标签:2023.8,排序,int,maxv,cin,补题,D9,include,指针
From: https://www.cnblogs.com/oijueshi/p/17601661.html

相关文章

  • [解题报告] 2023.8.2 dp专题练习赛
    比赛链接:Link[团队私有]T1:https://www.cnblogs.com/SXqwq/p/17600671.htmlT2:https://www.cnblogs.com/SXqwq/p/17601007.htmlT3:完全背包板子T4:https://www.cnblogs.com/SXqwq/p/17601622.html......
  • 2023.8
    1.GoodSubsegments这个已经是典中典题了。首先考虑一个段合法等价于\(mx-mn=r-l\),也就是\(mx-mn-r+l=0\),而且注意到\(mx-mn-r+l\ge0\),所以如果我们全局询问的话,那就是扫描线维护,然后维护一下全局的最小值以及最小值个数就行了。然后区间的子区间计数就考虑套维护历......
  • 2023.8.1
    8月第一天,约好球友一起玩,早上去广场的一号球场玩了一小会儿,好久没有这么爽过了,运动完出一身汗去吃自助餐,中午十二点吃到下午2点,告别彼此坐车回家,路上买了一批冰激凌,老冰棍啥的,晚上学习了一小时半吧,有些累了,看了个电影就休息了。......
  • 2023.8.1
    今天看SROP的时候,突然想到,既然ctfwiki上讲的不是很详细,搜其他SROP的博客,里面讲的例题又和ctfwiki上的不是很一样,仅有一点参考价值。那我为什么不能直接去搜ctfwiki加上SROP这两个关键词呢?这么一搜,果然找到了符合ctfwiki上内容,又有详细解读的博客,找到的第一篇里还是有点不够详细,找......
  • 2023.8.1 英雄的力量
    题目要求返回所有的非空英雄组的力量之和,换言之,只要枚举到的所有组即可,不用管顺序如何。因此我们可以先对序列进行排序,一旦排序完成,那么max和min计算会变得非常简单。前i个数最大的一定是末端那个,最小的一定是起始那个。现在假设a,b,c,d,e五个数(已经排序)。如果现在令d为最大值......
  • 暑假集训D8 2023.8.1 补题
    C.P3029[USACO11NOV]CowLineupS有\(n\)只牛,他们各自有自己的编号(不同牛的编号可能是相同的).这些牛站在不同的位置.现在需要给这些牛拍一张照.有如下要求选定一个范围内的牛拍照,这些牛需要包含所有出现过的编号照片的成本是这个范围,因此范围越小越好已经给定所有......
  • 2023.8.1 周二:自定义异常
    1//MyException2//继承Exception的类,即为自定义的异常类3publicclassMyExceptionextendsException{4//传递数字>10,则报异常5privateintdetail;6//Alt+Insert自动添加构造方法7publicMyException(inta){8this.detail=......
  • 补题报告之S班暑训第三场
    成绩比赛经过\(\text{A}\)看上去像一个贪心。由于不知道咋搞,胡出一个假的结论。\(x\)选手在别的榜单所在位置,之后的选手优先选,多个榜单,按照满足条件的榜单数量对每个选手排序。然后模拟。事实证明,他只有\(\text{50}\)分。\(\text{B}\)没理解样例咋来的,也不知道斜对角线的......
  • Codeforces Round 888 (Div. 3) 补题
    独立补了一道记忆化搜索的题,https://codeforces.com/contest/1851/problem/E由于初次接触对于使用场景和注意事项都不是很熟悉,写加调估计得有3h。本题的题面保证了本题是个无环图,允许dfs函数会有出口,存图不能用链式前向图,因为非常容易构造数据使得为稠密图,所以用二维数组或vec......
  • 暑假集训D6 2023.7.29 补题
    原比赛链接2022年华中科技大学程序设计新生赛(重现赛)官方题解华中科技大学2022新生赛(HUSTFCPC2022)题解&滚榜\(underset\)\(\underset{\sim}Λ\)\(\underset{\sim}{abcd}\)N.WalkAlone'sConjecture题意:给定一个整数\(n\),找出两个数\(x\)和\(y\),使得满足如下......