首页 > 其他分享 >「杂题乱刷」洛谷 P10155

「杂题乱刷」洛谷 P10155

时间:2024-02-13 18:55:23浏览次数:32  
标签:洛谷 cout -- cin long P10155 杂题 sim define

题目链接

P10155 [LSOT-2] 基于二分查找与插入的快速排序

解题思路

算法一:

容易发现,当 \(a_n\) 不为 \(n\) 时,我们无论如何都无法将 \(n\) 这个值插入到最后一位,否则我们可以依次将所有数字从大到小插入,这样也可以保证失去最少的贡献。

视写法获得 \(40\) 分或 \(60\) 分。

算法二:

发现对于位置 \(i\):

  • 若 \(1 \sim i\) 包含 \(1 \sim a_i\) 的所有数字,则这时再交换是没有意义的,因为此时可以使得 \(1 \sim i\) 的位置分别为 \(1 \sim i\)。

  • 若 \(1 \sim i\) 不包含 \(1 \sim a_i\) 的所有数字,则这时再交换是有意义的,因为此时无法使得 \(1 \sim i\) 的位置分别为 \(1 \sim i\)。

直接按照这个思路写代码即可获得 \(100\) 分,视写法时间复杂度在 \(O(n) \sim O(n(log(n)))\) 之间。

参考代码:

点击查看代码
/*
Tips:
你数组开小了吗?
你MLE了吗?
你觉得是贪心,是不是该想想dp?
一个小时没调出来,是不是该考虑换题?
*/
#include<bits/stdc++.h>
using namespace std;
#define map unordered_map
#define forl(i,a,b) for(register long long i=a;i<=b;i++)
#define forr(i,a,b) for(register long long i=a;i>=b;i--)
#define lc(x) x<<1
#define rc(x) x<<1|1
#define mid (l+r)>>1
#define cin(x) scanf("%lld",&x)
#define cout(x) printf("%lld",x)
#define lowbit(x) x&-x
#define pb push_back
#define pf push_front
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
#define ll long long
ll t;
ll n,a[2000010],vis[2000010],L;
void solve()
{
	cin>>n;
	forl(i,1,n)
		cin>>a[i];
	if(a[n]!=n)
		cout<<-1;
	else
	{
		ll ans=n;
		forl(i,1,n)
		{
			vis[a[i]]=1;
			while(vis[L+1] && L<n)
				L++;
			if(a[i]<=L)
				ans--;
		}
		cout<<ans;
	}
}
int main()
{
	IOS;
	t=1;
//	cin>>t;
	while(t--)
		solve();
    /******************/
	/*while(L<q[i].l) */
	/*    del(a[L++]);*/
	/*while(L>q[i].l) */
	/*    add(a[--L]);*/
	/*while(R<q[i].r) */
	/*	  add(a[++R]);*/
	/*while(R>q[i].r) */
	/*    del(a[R--]);*/
    /******************/
	QwQ;
}

标签:洛谷,cout,--,cin,long,P10155,杂题,sim,define
From: https://www.cnblogs.com/wangmarui/p/18014717

相关文章

  • 洛谷P5725 【深基4.习8】求三角形
    洛谷P5725【深基4.习8】求三角形【深基4.习8】求三角形题目描述模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。输入格式输入矩阵的规模,不超过9。输出格式输出矩形和正方形样例#1样例输入#14样例输出#101020304050607080910111213141516......
  • 洛谷 P1795 无穷的序列 题解
    题目传送门题目大意:给定整数\(a\),判断\(a\)是否属于数列\(1,2,4,7,11\cdots\)。多测。1.暴力枚举(90pts)不难发现,该数列除第一项外第\(n\)项比第\(n-1\)项多\(n-1\)。故暴力枚举\(n\),计算数列的每一项,判断是否与\(a\)相等,大于\(a\)就break。多测加记忆化,用mx......
  • 「杂题乱刷」P8687
    题目链接最典的状压dp了。直接枚举每个状态然后用01背包的方式做即可。时间复杂度\(O(n2^m)\)。代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>usingnamespacestd;......
  • 洛谷P3455 笔记
    传送门又是一道看了tj的题。题意\(t\)次询问,每次询问给定\(n\),\(m\),\(k\),求\(\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=k]\)。\(1\let\le5\times10^4\),\(1\lek\len\),\(m\le5\times10^4\)正文把\(k\)扔到上界去,记原式变为\(\sum_{i=1}^{\lfloor\frac{n}{k}......
  • 「杂题乱刷」CF1886D
    题目链接简单计数题。容易看出\(<,>\)这两个符号一定只有\(1\)种选择,而\(?\)就有\(i-1\)中选择,总方案数很好推出,这样时间复杂度为\(O(nm)\),不能通过此题,因此我们考虑用逆元优化,优化后时间复杂度\(O(m)\)。参考代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?......
  • 【洛谷 P2670】[NOIP2015 普及组] 扫雷游戏 题解(模拟)
    [NOIP2015普及组]扫雷游戏题目背景NOIP2015普及组T2题目描述扫雷游戏是一款十分经典的单机小游戏。在行列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的......
  • 洛谷美化食用指北
    洛谷美化食用指北(蒟蒻的第一篇技术性文章)话不多说,直奔正题——1.洛谷主界面美化1.1氩洛谷脚本的安装和使用首先安装一个油猴扩展(非谷歌浏览器都可以,因为Google应用商店被墙了)然后去这个网站下载脚本,安装即可。刷新洛谷主页面,是不是焕然一新~2.洛谷个人主页的美化2......
  • 洛谷P10136 暨 USACOJan2024S T3 题解
    题意简述原题已经很简了,没有什么简述的必要了。思维路径请注意本题解可以保证正确性但不保证如果有极端的Hack数据能够通过。拿到这道题上来的暴力想必是很容易的,即枚举每个\(L\)判断是否合法。接着我们就考虑优化,减少需要枚举的\(L\)的量。题目中要求余数最多有\(3\)......
  • 洛谷P10135 暨 USACOJan2024S T2 题解
    题意简述给点一棵有\(n\)个节点的树,在每个时间点都会在某个节点出现一瓶药水,记\(p_i\)为第\(i\)个时间点出现药水的节点,定义一次遍历为从\(1\)号节点走到任意节点,要求在遍历次数最少的情况下拾取最多数量的药水。思维路径首先我们要探讨遍历次数最少的状态是怎样的。由......
  • 转载洛谷:23.08.19 普及模拟1 T1
    Past题目描述所有人,都有一段支离破碎的过去。你有\(n\)段过去的经历,有时顺利,有时不顺,于是你用一个评价值\(a_i\)来描述你的第\(i\)段经历,它们构成了长度为\(n\)的序列\(a\)。你决定对过去进行反思总结,反思深度为\(d\)。如果\(d\ge1\),那你就要算出\(a\)的所有子区间的和之和;如......