垃圾福建垫底选手来看看这题。

大家怎么都写带 \(log\) 的。

我来说一个线性做法好了。

那么我们考虑枚举 \(k\) 作为翻转完的最小值。

那么构造出一个满足条件的操作,我们在 \(a_i\) 中查询一个最大的位置使 \(a_i < k\) ,那么 \(a_1\) 到 \(a_i\) 都要进行翻转,且 \(b_1 到 b_i > k\),那么这样做的次数是 \(i\) 或者 \(i - 1\)(考虑\(k\)是\(b\)且对应的\(a\)在需要翻转的区间里)的。

那么考虑对这个 \(k\) 求出一个最小的最大值\(z\),同样的我们在\(a_i\)中查询一个最小的位置使\(a_i > z\),那么\(a_i\) 到 \(a_n\)都要进行翻转,且 \(b_i\) 到 \(b_n > k\),且 \(b_i\) 到 \(b_n < z\) ,那么这样做的次数是 \(n - i + 1\) 或者 \(n - i\) (考虑 \(z\) 是 \(b\) 且对应的 \(a\) 在需要翻转的区间里)的,两边次数加起来不超过 \(m\) 。

我们考虑对这几个条件进行分析一下,首先 \(i\) 对于 \(z\) 减小是单调的,由于 \(min\) 只能下降不能上升, \(max\) 只能上升不能下降,那么对于\(z\)下降来说,他的条件会越来越苛刻。

又因为我们从小到大枚举 \(k\) ,用来满足 \(k\) 的次数会单调不降,那么我们发现,对于一个 \(z\) ,他的所有条件即 \(b_i\) 到 \(b_n > k\),且 \(b_i\) 到 \(b_n < z\) ,次数和小于 \(m\) ,在 \(k\) 上升都具有单调性,感性分析一下,在 \(k\) 上升时, \(z\) 具有单调不降的性质。

那么我们只要对 \(k = 1\) 一个 \(log\) 求出对应的 \(z\) ,再进行双指针,就可以做到 \(O(n)\) 了。

upd:发现自己的这个做法挺难写的,应该考虑计算的时候,也扩展到整个序列就好做了。

[省选联考 2021 A/B 卷] 卡牌游戏
#include <bits/stdc++.h>
using namespace std;
struct hehe{
long long a, num;
int op;
bool operator < (hehe b) const
{
return a < b.a;
}
}a[2000001];
bool used[2000001];
int main()
{
// freopen("card3.in", "r", stdin);
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i].a);
a[i].num = i;
a[i].op = 1;
}
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[n + i].a);
a[i + n].num = i;
a[i].op = 1;
}
sort(a + 1, a + n * 2 + 1);
int l = 0, r = n * 2 + 1, now = 0;
while(!used[a[l + 1].num] && now + a[l + 1].op <= k) now += a[l + 1].op, used[a[l + 1].num] = 1, l++;
while(!used[a[r - 1].num] && now + a[r - 1].op <= k) now += a[r - 1].op, used[a[r - 1].num] = 1, r--;
long long ans = 1000000000000;
while(l >= 0)
{
ans = min(a[r - 1].a - a[l + 1].a, ans);
used[a[l].num] = 0;
now -= a[l].op;
l--;
while(!used[a[r - 1].num] && now + a[r - 1].op <= k) now += a[r - 1].op, used[a[r - 1].num] = 1, r--;
}
cout << ans << endl;
}

[省选联考 2021 A/B 卷] 卡牌游戏的更多相关文章

  1. 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)

    洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\)​ \(10^9\)​ 的时代了吗?落伍了落伍了/ ...

  2. [省选联考 2021 A/B 卷] 图函数

    考虑到一件事情首先\(u -> u\)是可行的. 所以其实对于\(f(u,G')\) 只要考虑\([1,u]\)的点. 那么考虑其条件等价于\(u -> i\) 和 \(i -> u ...

  3. [省选联考 2021 A/B 卷] 宝石

    大概是一眼看出来是这个给定序列在树上序列上按顺序跑最大匹配. 然后考虑维护向上和向下的链的值. 大概的做法是用倍增维护,考虑\(f_{u,i}\)是\(c_u\)在序列里的位置向后匹配\(2^i\)位 ...

  4. [省选联考 2021 A 卷] 矩阵游戏

    很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...

  5. 题解 P6622 [省选联考 2020 A/B 卷] 信号传递

    洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...

  6. luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp)

    luoguP6622 [省选联考 2020 A/B 卷] 信号传递(状压dp) Luogu 题外话: 我可能是傻逼, 但不管我是不是傻逼, 我永远单挑出题人. 题解时间 看数据范围可以确定状压dp. ...

  7. luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分)

    luoguP6619 [省选联考 2020 A/B 卷]冰火战士(线段树,二分) Luogu 题外话1: LN四个人切D1T2却只有三个人切D1T1 很神必 我是傻逼. 题外话2: 1e6的数据直接i ...

  8. 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)

    洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\)​ 算法通过,因此可以考虑 \(\mathcal O(n^2 ...

  9. 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)

    题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...

随机推荐

  1. 内网渗透DC-1靶场通关(CTF)

    最新博客见我的个人博客地址 DC系列共9个靶场,本次来试玩一下DC-1,共有5个flag,下载地址. 下载下来后是 .ova 格式,建议使用vitualbox进行搭建,vmware可能存在兼容性问题. ...

  2. Windows系统安装Java步骤

    今天学习到Burp Suite的使用,提示到安装Burp Suite需要安装Java环境. 于是乎,本弱鸡开启了漫长的Java环境安装之路~ 一.Java SE版本众多,在这里推荐下载Java1.8版 ...

  3. JS最简单的定时累加计数器

    js代码: 1 var timer , k = 0; 2 function star() { 3 k += 1; 4 document.getElementById("num"). ...

  4. PHP伪协议与文件包含漏洞1

    PHP文件包含漏洞花样繁多,需配合代码审计. 看能否使用这类漏洞时,主要看: (1)代码中是否有include(),且参数可控: 如: (2)php.ini设置:确保 allow_url_fopen= ...

  5. 关于ORBSLAM的发展脉络

    ORBSLAM系列存在随机性的原因:RANSAC中随机数生成器的使用:跟踪.映射和回环闭合线程的不可预测的交织,这取决于操作系统调度程序,这种不可预测性使得在不同的执行中估计的关键帧的姿势可能不同,甚 ...

  6. pagelayout在py中的引用不支持size_hint和pos_hint

    from kivy.uix.pagelayout import PageLayout from kivy.uix.button import Button from kivy.app import A ...

  7. django通过管理页上传图片

    1.配置目录 新建上传录.static/medis 2.设置上传文件保存路径 # setting.py中设置上传文件路径static/media MEDIA_ROOT = os.path.join(B ...

  8. .NET CLI简单教程和项目结构

    WHAT IS .NET CLI ? .NET 命令行接口 (CLI) 工具是用于开发.生成.运行和发布 .NET 应用程序的跨平台工具链. 来源:.NET CLI | Microsoft Docs ...

  9. Beta阶段第八次会议

    Beta阶段第八次会议 时间:2020.5.24 完成工作 姓名 工作 难度 完成度 ltx 1.修改一下小程序游客模式的风格 轻 80% xyq 1.针对昨天提出的意见对场地申请表格进行修改 中 9 ...

  10. 【二食堂】Beta - Scrum Meeting 4

    Scrum Meeting 4 例会时间:5.17 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 继续完成文本区域划词添加的功能 issue 1. 划词功能已经实现,继续开发 ...