题目链接

洛谷

题目大意

一堆二元组,按第一个元素升序排列,现在可以使用 m m m次操作,每次操作使一个二元组两个元素交换,求所有二元组第一个元素构成的数组的极差的最小值。

考场解法

大法师, 20 p t s 20pts 20pts。

考完之后发现我傻*了。

n 2 n^2 n2解法(普及组难度)

显然,产生极差的最大值和最小值一定都是某个二元组的元素(不然零头会被浪费)。也就是说最大值和最小值均只有 2 n 2n 2n级别种情况。

先把这 2 n 2n 2n个元素理起来排好序,再枚举最大值和最小值,判断是否合法即可。

考虑判断。枚举完最大值和最小值,就必定有一连串卡片( a i ∈ [ m i n , m a x ] a_i∈[min,max] ai​∈[min,max])的不用翻了。其他的全要翻。那么就有两种情况使答案不合法。

1、要翻的卡片数量 > m >m >m。用 n n n减去不要翻的即可。

2、要翻的卡片中,有 b i b_i bi​值在枚举范围之外的(这些卡片怎么翻也没用)。由于不要翻的卡片是连续一段(题中 a i a_i ai​升序),要翻的卡片一定是前后缀,故预处理 b i b_i bi​前后缀最值,若最值不在该范围内则整组解不合法。

复杂度 O ( 2 n × 2 n ) = O ( n 2 ) O(2n×2n)=O(n^2) O(2n×2n)=O(n2)。期望 40 p t s 40pts 40pts。

线性解法(也是普及组难度)

考虑答案的单调性。

如果值域 [ x , y ] [x,y] [x,y]不可行,那么值域 [ x + k , y ] ( k > 0 ) [x+k,y](k>0) [x+k,y](k>0)一定不可行。证明分情况讨论。

  • 若上次是因为翻牌太多不可行,那值域变小意味着要翻的牌更多,显然不可行。

  • 若上次是因为有一张牌正反面均超出值域,那这一次值域变小,更加超出值域,不可行。

由于我们要做这道题,所以每一次的 y y y一定是在当前 x x x下最小的,也就是 [ x , y − 1 ] [x,y-1] [x,y−1]就不行了,所以当 x x x变大时, y y y至少是上次的 y y y。也即, y y y随 x x x单调不减。

考虑 T w o _ P o i n t e r s Two\_Pointers Two_Pointers。复杂度 O ( n ) O(n) O(n)。期望 100 p t s 100pts 100pts。具体细节看代码。

附两组样例。

#include<bits/stdc++.h>
using namespace std;
typedef long long ak;
#define im INT_MAX
#define F(i,j,k) for(int i=j;i<=k;i++)
#define G(i,j,k) for(int i=j;i>=k;i--)
int ans=im,cur=1,a[1111111],b[1111111],c[2222222],n,m,mn=im,mx=-im,xj[2222222],sj[2222222],premin[1111111],premax[1111111],sufmin[1111111],sufmax[1111111];
bool lpc(int i,int j){return i<j;
}
bool cxk(int jcd){int l=xj[cur],r=sj[jcd];if(l>r)return 0;if(r==n&&l==1)return 1;if(r==n){if(l-1>m)return 0;if(premin[l-1]<c[cur])return 0;if(premax[l-1]>c[jcd])return 0;return 1;}if(l==1){if(n-r>m)return 0;if(sufmin[r+1]<c[cur])return 0;if(sufmax[r+1]>c[jcd])return 0;return 1;}if(n-r+l-1>m)return 0;if(premin[l-1]<c[cur])return 0;if(premax[l-1]>c[jcd])return 0;if(sufmin[r+1]<c[cur])return 0;if(sufmax[r+1]>c[jcd])return 0;return 1;
}
int main(){ios::sync_with_stdio(0);cin>>n>>m;F(i,1,n)cin>>a[i];F(i,1,n)cin>>b[i];F(i,1,n){mn=min(mn,b[i]);premin[i]=mn;mx=max(mx,b[i]);premax[i]=mx;c[i*2-1]=b[i];c[i<<1]=a[i];}mx=-im,mn=im;G(i,n,1){mn=min(mn,b[i]);sufmin[i]=mn;mx=max(mx,b[i]);sufmax[i]=mx;}sort(c+1,c+n*2+1,lpc);a[n+5]=im;//´Ë´¦·ÀÖ¹cur³¬½ç¡£ÎÒΪ´Ë±¬ÁËÒ»´ÎÁã¡£F(i,1,n<<1){while(a[cur]<c[i])cur++;xj[i]=cur;}cur=n;G(i,n<<1,1){while(a[cur]>c[i])cur--;sj[i]=cur;}int jcd=1;F(i,1,n<<1){cur=i;bool f=0;while(!cxk(jcd)){jcd++;if(jcd>n*2){f=1;break;}}if(f)break;ans=min(ans,c[jcd]-c[cur]);}cout<<ans<<"\n";return 0;
}
/*10 53  5  9 11 13 17 19 22 24 29
13 12 18  5  7 33 12 10 22 11
ans=1110 5
180 193 194 225 260 273 276 314 316 322
271 1 255 234 196 500 250 240 218 205
ans=80*/

Solution to luogu P7514——普及选手也能看懂!相关推荐

  1. 【优秀选手采访】看十强选手如何顺利拿下腾讯offer

    腾讯广告算法大赛一直以来面向全社会吸引各方算法达人,通过真实的广告产品和场景.丰富多元极具挑战力的赛题设置,为腾讯广告遴选出大量杰出人才,促进技术创新,帮助腾讯广告不断成长,构筑国内领先的大数据营销平 ...

  2. 微软麻将AI Suphx或引入“凤凰房”,与其他AI对打

    作者 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]在刚刚结束的上海2019世界人工智能大会上,微软宣布了其在人工智能领域的最新研究突破--由微软亚洲研究院研发的麻将 AI ...

  3. Codeforces Round #706 (Div. 2)-A. Split it!-题解

    目录 Codeforces Round #706 (Div. 2)-A. Split it! Problem Description Input Output Sample Input Sample ...

  4. noip2017爆炸记——题解总结反省(普及组+提高组)

    相关链接: noip2018总结 noip2017是我见过的有史以来最坑爹的一场考试了. 今年北京市考点有一个是我们学校,我还恰好被分到了自己学校(还是自己天天上课的那个教室),于是我同时报了普及提高 ...

  5. Luogu P1087 FBI树

    P1087 FBI树 题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串, ...

  6. 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/3e7a2c84288e 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...

  7. 夺冠!中国队国际奥数大赛再称雄,满分选手已保送清华姚班,“中国二队”并列第一...

    晓查 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI 经过16.17两日的角逐,在英国巴斯举办的第60届国际数学奥林匹克竞赛(IMO 2019)终于落下帷幕.中国队和美国队以227分并列第 ...

  8. 分治法【锦标赛问题:设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)循环赛一共进行n-1天。】

    目   录 1.问题 2.问题分析 3.程序代码(非递归) 4.程序代码(递归) 5.总结 1.问题 锦标赛问题:设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次: ( ...

  9. [GO语言基础] 二.编译运行、语法规范、注释转义及API标准库知识普及

    作为网络安全初学者,会遇到采用Go语言开发的恶意样本.因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识:另一方面是分享与读者,希望大家一起进步.前文介绍了什么是GO语言 ...

最新文章

  1. webstorm中git密码输入错误,重置问题
  2. 119. Pascal's Triangle II (Graph; WFS)
  3. html中双重id标签怎么写,PHP读取HTML并处理双重ID外观
  4. 图解用MySQL创建进销存数据库
  5. MyEclipse内存溢出问题
  6. 字符串的展开(洛谷P1098题题解,Java语言描述)
  7. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
  8. centos系统使用snap安装软件(还是别用吧)
  9. python 下载文件-python下载文件的三种方法
  10. 使用ServletContextListener关闭Redisson连接
  11. 黑苹果驱动_黑苹果目前已可以完美驱动内置intel WiFi
  12. 计算机无法添加本地策略组,电脑打不开本地组策略编辑器,求破~!
  13. 模拟新浪微博自动登陆
  14. Exception in thread “main“ java.io.NotSerializableException:
  15. zookeeper启动报错: Invalid configuration, only one server specified (ignoring)
  16. Spring初窥门径
  17. android命令大全 pdf,android调试桥(adb)常用命令.pdf
  18. 《咸鱼分享》咸鱼在线TOP
  19. 强制结束进程的命令和软件
  20. C语言中空格,空字符,字符数组结束符的区别

热门文章

  1. 色彩运用:10个最新的黑色风格网站作品
  2. 台州新骆电子海图演示版下载_演示版
  3. 常见的对话框Dialog
  4. python中.find函数的使用方法及实例_FIND函数的详细讲解及实例分析
  5. C# 绘图窗体(直线,圆,矩形,橡皮擦)可以调节画布颜色,粗细)还有图像处理功能
  6. Verilog数据选择器参数化设计
  7. 计算机数据分析专业高中小三门,高中必读:2017高考小三门竞争数据分析
  8. 我玩了玩chatGPT,她确实NB!
  9. 前端页面添加音乐插件
  10. android 升级androidx 埋坑总结