https://www.zybuluo.com/ysner/note/1300791

题面

贝西和她的朋友艾尔西正在玩这个简单的纸牌游戏。游戏有\(2N\)张牌,牌上的数字是\(1\)到\(2N\)。把这些牌分成两份,贝西有\(N\)张,艾尔西有另外\(N\)张。接下来她们进行\(N\)轮出牌,每次各出一张牌。一开始,谁出的牌上的数字大,谁就获得这一轮的胜利。贝西有一个特殊权利,她可以在任意一个时刻把原本数字大的获胜的规则改成数字小的获胜,这个改变将会一直持续到游戏结束。特别的,贝西可以从第一轮开始就使用小牌获胜的规则,也可以直到最后一轮都还不使用大牌获胜的规则。

现在,贝西已经知道了艾尔西出牌的顺序,她想知道她最多能够赢多少轮。

解析

显然前面每次选择比对方大却又尽可能小的牌,后面选择比对方小却又尽可能大的牌。

其实这就是田径赛马的原理。

支持删除和二分查找,显然\(set\)。

然后分别从前后预处理应该出什么牌,最后枚举中介点就行。

问题出在具体实现上。

后一个过程其实可以用一个存负值的\(set\)来搞。

而不是像蒟蒻一样用一个存正值的\(set\)然后\(TLE\)半天。

还有\(lower\_bound\)没找到结果会返回\(end()\)。

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<set>
#define ll long long
#define fp(i,a,b) for(int i=a;i<=b;++i)
#define fq(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
const int N=5e5+100;
int n,a[N],q[N],h[N],ans;
bool vis[N];
set<int>S1,S2;
set<int>::iterator it;
int main()
{
scanf("%d",&n);
fp(i,1,n) scanf("%d",&a[i]),vis[a[i]]=1;
fp(i,1,2*n) if(!vis[i]) S1.insert(i),S2.insert(-i);
fp(i,1,n)
{
it=S1.lower_bound(a[i]);
if(it!=S1.end())
{
q[i]=q[i-1]+1;
S1.erase(it);
}
else q[i]=q[i-1],S1.erase(*S1.begin());
}
fq(i,n,1)
{
it=S2.lower_bound(-a[i]);
if(it!=S2.end())
{
h[i]=h[i+1]+1;
S2.erase(it);
}
else h[i]=h[i+1],S2.erase(*S2.begin());
}
fp(i,0,n) ans=max(ans,q[i]+h[i+1]);
printf("%d\n",ans);
return 0;
}

[USACO15DEC]High Card Low Card (Platinum)的更多相关文章

  1. 【题解】P3129高低卡(白金)High Card Low Card

    [题解][P3129 USACO15DEC]高低卡(白金)High Card Low Card (Platinum) 考虑贪心. 枚举在第几局改变规则,在改变规则之前,尽量出比它大的最小的牌,在改变规 ...

  2. 【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)

    [BZOJ4391][Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了. #include<iostr ...

  3. [USACO15DEC]高低卡(白金)High Card Low Card (Platinum)

    题目描述 Bessie the cow is a hu e fan of card games, which is quite surprising, given her lack of opposa ...

  4. 【刷题】BZOJ 4391 [Usaco2015 dec]High Card Low Card

    Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of ...

  5. [BZOJ4391][Usaco2015 dec]High Card Low Card dp+set+贪心

    Description Bessie the cow is a huge fan of card games, which is quite surprising, given her lack of ...

  6. 【dp 贪心】bzoj4391: [Usaco2015 dec]High Card Low Card

    巧妙的贪心 Description Bessie the cow is a huge fan of card games, which is quite surprising, given her l ...

  7. BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库

    正解:贪心+线段树/set库 解题报告: 算辣直接甩链接qwq 恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明 (这里有个,很妙的想法,就是,从后往前推从前往后 ...

  8. [bzoj4391] [Usaco2015 dec]High Card Low Card 贪心 线段树

    ---题面--- 题解: 观察到以决策点为分界线,以点数大的赢为比较方式的游戏都是它的前缀,反之以点数小的赢为比较方式的都是它的后缀,也就是答案是由两段答案拼凑起来的. 如果不考虑判断胜负的条件的变化 ...

  9. bzoj4391 [Usaco2015 dec]High Card Low Card

    传送门 分析 神奇的贪心,令f[i]表示前i个每次都出比对方稍微大一点的牌最多能赢几次 g[i]表示从i-n中每次出比对方稍微小一点的牌最多赢几次 ans=max(f[i]+g[i+1]) 0< ...

随机推荐

  1. NioEventLoop.run select处理IO事件(boss/worker)流程:

    NioEventLoop.run select处理IO事件(boss/worker)流程:processSelectedKeysprocessSelectedKeysOptimizedprocessS ...

  2. Mybatis 处理日期格式自动转换

    java.lang.String和java.util.Date之间自动转换 @DateTimeFormat(pattern="yyyy-MM-dd")//页面写入数据库时格式化 @ ...

  3. centos7安装mysql5.7.19及配置远程连接

    centos7安装mysql5.7.19及配置远程连接------https://blog.csdn.net/Lh19931122/article/details/77996213

  4. [luoguP2626] 斐波那契数列(升级版)(模拟)

    传送门 模拟 代码 #include <cmath> #include <cstdio> #include <iostream> #define N 50 #def ...

  5. 详解SpringBoot 添加对JSP的支持(附常见坑点)

    序言: SpringBoot默认不支持JSP,如果想在项目中使用,需要进行相关初始化工作.为了方便大家更好的开发,本案例可直接作为JSP开发的脚手架工程 SpringBoot+War+JSP . 常见 ...

  6. [bzoj1059][ZJOI2007]矩阵游戏_二分图最大匹配

    矩阵游戏 bzoj-1059 ZJOI-2007 题目大意:给定一个n*n的棋盘,上面有一些格子被染黑,剩下都是白色.你每次可以交换两列或者两行,问你能否通过一系列操作使得棋盘的主对角线上的格子全是黑 ...

  7. JSP服务器响应

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/server-response.html: 当一个Web服务器响应浏览器的HTTP请求时,响应通常包括一个 ...

  8. js下载

    下载用ajax不好使,得用表单提交的方式 download:function(url,paramObj){ var doc = document; //使用一个隐藏的form表单执行提交,没有则创建 ...

  9. Linux命令输出头(标题)、输出结果排序技巧

    原文:http://blog.csdn.net/hongweigg/article/details/65446007 ----------------------------------------- ...

  10. JavaScript错误处理和堆栈追踪

    转自:https://github.com/dwqs/blog/issues/49 有时我们会忽略错误处理和堆栈追踪的一些细节, 但是这些细节对于写与测试或错误处理相关的库来说是非常有用的. 例如这周 ...