P7514-[省选联考2021A/B卷]卡牌游戏【贪心】
正题
题目链接:https://www.luogu.com.cn/problem/P7514
题目大意
给出\(n\)个卡牌有\(a_i/b_i\),开始都是\(a_i\)朝上,将不超过\(m\)张卡牌变为\(b_i\)面朝上,使得朝上的数字中最大值减去最小值最小。
\(3\leq n\leq 10^6,1\leq m<n,1\leq a_i,b_i\leq 10^9\)
解题思路
虽然数据比较水,但是题目也是一道比较水的贪心题。
先离散化然后考虑暴力点的想法。枚举最大值和最小值\(l,r\),那么对于\(a_i\)在\([l,r]\)之间的自然是不理,在之外的一定需要翻,如果翻转后存在\(b_i\)不在\([l,r]\)之间,那么显然行不通。
这样我们就可以\(O(n^2)\)了。
不难发现假设\([l,r]\)行的通那么\([l,r+1]\)用原来的方法一定也行得通,所以对于\(r\)递增,\(l\)也是不降的,双指针维护一下就好了。
时间复杂度\(O(n\log n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std;
const int N=2e6+10;
int n,m,ans,a[N],b[N],c[N],mx[N],mi[N],nx[N],ni[N],pos[N];
int read(){
int x=0,f=1;char c=getchar();
while(!isdigit(c)){if(c=='-')f=-f;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}
return x*f;
}
bool cmp(int x,int y)
{return a[x]<a[y];}
bool check(int l,int r){
int L=pos[l],R=pos[r+1]-1;
int k=m-(n-R)-(L-1);
if(k<0)return 0;
if(mx[L-1]>r||mi[L-1]<l)return 0;
if(nx[R+1]>r||ni[R+1]<l)return 0;
return 1;
}
int main()
{
n=read();m=read();
for(int i=1;i<=2*n;i++)a[i]=b[i]=read(),c[i]=i;
sort(c+1,c+1+2*n,cmp);int cnt=2*n;
for(int i=1;i<=2*n;i++)a[c[i]]=i;
mi[0]=ni[n+1]=1e9+7;
for(int i=1;i<=n;i++)mx[i]=max(a[i+n],mx[i-1]);
for(int i=1;i<=n;i++)mi[i]=min(a[i+n],mi[i-1]);
for(int i=n;i>=1;i--)nx[i]=max(a[i+n],nx[i+1]);
for(int i=n;i>=1;i--)ni[i]=min(a[i+n],ni[i+1]);
for(int i=1;i<=n;i++)pos[a[i]]=i;pos[cnt+1]=n+1;
for(int i=cnt;i>=1;i--)
if(!pos[i])pos[i]=pos[i+1];
ans=1e9+7;int z=0;
for(int i=1;i<=cnt;i++){
while(z<i&&check(z+1,i))z++;
if(z)ans=min(ans,b[c[i]]-b[c[z]]);
}
printf("%d\n",ans);
}
P7514-[省选联考2021A/B卷]卡牌游戏【贪心】的更多相关文章
- P7518-[省选联考2021A/B卷]宝石【主席树,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P7518 题目大意 给出\(n\)个点的一棵树,每个点上有不大于\(m\)的数字. 然后给出一个长度为\(c\)的各 ...
- [省选联考 2020 A 卷] 组合数问题
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...
- [省选联考 2021 A 卷] 矩阵游戏
很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...
- [省选联考 2021 A/B 卷] 卡牌游戏
垃圾福建垫底选手来看看这题. 大家怎么都写带 \(log\) 的. 我来说一个线性做法好了. 那么我们考虑枚举 \(k\) 作为翻转完的最小值. 那么构造出一个满足条件的操作,我们在 \(a_i\) ...
- luoguP6623 [省选联考 2020 A 卷] 树(trie树)
luoguP6623 [省选联考 2020 A 卷] 树(trie树) Luogu 题外话: ...想不出来啥好说的了. 我认识的人基本都切这道题了. 就我只会10分暴力. 我是傻逼. 题解时间 先不 ...
- luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数)
luoguP6620 [省选联考 2020 A 卷] 组合数问题(斯特林数) Luogu 题外话: LN切这题的人比切T1的多. 我都想到了组合意义乱搞也想到可能用斯特林数为啥还是没做出来... 我怕 ...
- luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)
luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...
- P7515-[省选联考 2021A卷]矩阵游戏【差分约束】
正题 题目链接:https://www.luogu.com.cn/problem/P7515 题目大意 有一个\(n*m\)的矩形\(A\),然后给出一个\((n-1)*(m-1)\)的矩形\(B\) ...
- 洛谷P6623——[省选联考 2020 A 卷] 树
传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...
随机推荐
- 如何快速排查发现redis的bigkey?4种方案一次性给到你!
本篇文章将以redis的bigkey为主题进行技术展开,通过从认识redis的高性能,bigkey的危害.存在原因.4种解决方案,到模拟实战演练的介绍方式,来跟大家一起认识.探讨和学习redis. 先 ...
- Tcp三次握手中细节
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如下图所示.主机A为客户机,主机B为服务器 说明:(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B ...
- Mybatis轻松入门(仅要求会用看着一个就够了,略过源码分析部分即可)
文章目录 ==一.概念== 二.快速入门 1.开发步骤 2.环境搭建 2.1.导入Mybatis的坐标和其他坐标 2.2.创建User表 2.3.编写实体 2.4.编写UserMapper配置文件 2 ...
- [ASP.NET MVC]@RenderSection,@RenderBody(),@RenderPage
1.@RenderBody() 作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之 ...
- servlet通过响应头Content-Disposition实现文件下载效果
package day08; import java.io.File; import java.io.FileInputStream; import java.io.IOException; impo ...
- 我对数据库关系代数中减法sql实现的思考:mysql脚本
一.创建数据库,创建表结构 CREATE DATABASE Test_sub DEFAULT CHARACTER SET utf8; USE Test_sub; CREATE TABLE studen ...
- 通过 layout 探索 kratos 运行原理
创建项目 首先需要安装好对应的依赖环境,以及工具: go 下载 protoc go install google.golang.org/protobuf/cmd/protoc-gen-go@lates ...
- MySQL——InnoDB事务
事务:全部成功 或 全部失败! ------------------------------------------------------------------------------------ ...
- [考试总结]noip模拟41
发现长时间鸽博客会导致 rp--,所以今天来补一补 这个题目其实不是很毒瘤,然而是非常毒瘤... 题目不说请就是非常非常的烦人 首先 \(T1\) 就整整有两个歧义的地方,也就是说我们一共有 \(4\ ...
- Redis哨兵机制的实现及与SpringBoot的整合
1. 概述 前面我们聊过Redis的读写分离机制,这个机制有个致命的弱点,就是主节点(Master)是个单点,如果主节点宕掉,整个Redis的写操作就无法进行服务了. 为了解决这个问题,就需要依靠&q ...