BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库
正解:贪心+线段树/set库
解题报告:
恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明
(这里有个,很妙的想法,就是,从后往前推从前往后推可能会有相同的牌嘛,但是其实这个是没有个关系的!
因为,既然有相同的牌那么就必定有多了的牌,然后如果这个多了的牌比重了的牌大我们就放前面,比重了的小我们就放后面,这样就不会影响答案的正确性了……
哇我觉得这个想法真是太神仙了像我这种菜鸡自己单独想的话是绝对想不到这个的我可能就直接放弃贪心了TT
但是纯贪心的话是会超时的TT然后我就又参考了下题解,发现有线段树&set库两种优化方法?因为set库还并不了解所以先把线段树的代码看完了……看完之后感觉对线段树也有了更深的认识啊(恩大概是因为我太菜了对线段树的认识太浅薄所以随便个什么东西都能让我感觉很神仙很有启发TT
直接放代码quq
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,x,y) for(register ll i=x;i<=y;++i) #define my(i,x,y) for(register ll i=y;i>=x;--i) ; ll n,a[N],b[N],ans[N],tot=; ]; ]; ll read() { ; ')ch=getchar(); )+(x<<)+(ch^'),ch=getchar(); return x; } void build(ll d,ll l,ll r) { t[d].s1=t[d].s2=; if (l==r) return; ll mid=(l+r)>>; build(d<<,l,mid);build((d<<)|,mid+,r); } void update(ll d,ll op) { ll s; )|].s1,t[d<<].s2); ].s1,t[(d<<)|].s2); t[d].s1=t[d<<].s1+t[(d<<)|].s1-s; t[d].s2=t[d<<].s2+t[(d<<)|].s2-s; } void ins(ll d,ll l,ll r,ll x,ll op) { ;;return;} ; ,l,mid,x,op); )|,mid+,r,x,op); update(d,op); } int main() { n=read(); rp(i,,n)b[i]=read(),vis[b[i]]=; my(i,,n<<)if(!vis[i])a[++tot]=i; rp(i,,n)ins(,,n<<,a[i],),ins(,,n<<,b[i],),ans[i]+=i-t[].s1; build(,,n<<); my(i,,n)ins(,,n<<,a[i],),ins(,,n<<,b[i],),ans[i-]+=n-i+-t[].s1; ; rp(i,,n)mx=max(mx,ans[i]); printf("%lld",mx); ; }
然后港下set做法?话说set做法实在太太太简单了趴,,,完全不用脑子的说,,,我当初还是太弱了呢连set和lower_bound都不会qwq
就非常简单啊,lower_bound优化一下查找过程就水过去了,挺无趣的qwq还是线段树的比较有趣qwq
然后代码放一下qwq
#include<bits/stdc++.h> using namespace std; #define ll long long #define rp(i,x,y) for(register ll i=x;i<=y;++i) #define my(i,x,y) for(register ll i=x;i>=y;--i) ; ll n,a[N],b[N],ans,f[N],g[N],tot; ]; set<ll>c; ll read() { ; ')ch=getchar(); )+(x<<)+(ch^'),ch=getchar(); return x; } int main() { n=read(); rp(i,,n)b[i]=read(),vis[b[i]]=; rp(i,,n<<)if(!vis[i])a[++tot]=i; rp(i,,n)c.insert(a[i]); rp(i,,n) { set<ll>::iterator it=c.upper_bound(b[i]); ]+,c.erase(it); ]; } c.clear(); rp(i,,n)c.insert(-a[i]); my(i,n,) { set<ll>::iterator it=c.upper_bound(-b[i]); ]+,c.erase(it); ]; } rp(i,,n)ans=max(ans,f[i]+g[i+]); printf("%lld\n",ans); ; } //完美结束yeah!
完美结束嘻嘻嘻
ps:
感觉这个好像不是完全是个线段树?并不知道是什么思想暂且先当做线段树趴!
再,pppppps:
第一次在博客上写题解,感觉还挺新奇的?以后要多写点儿题解(毕竟灵巧太蒻了有很多题目都要再总结记录下来啊quq不然可能以后再看做过的题目都会怀疑自己以前写的代码都是些什么神仙玩意儿了QAQ
然后感觉格式有点儿丑啊还是……可能还有很多新奇的编辑工具不会用趴,比如说代码……我的代码插入那儿真是太丑了QAQ想换成主色调为黑的感觉超级酷可惜不会换(dbq我不该把心思都放在博客好不好看上的……忏悔TT
BZOJ4391 High Card Low Card [Usaco2015 dec](贪心+线段树/set库的更多相关文章
- 【BZOJ4391】[Usaco2015 dec]High Card Low Card(贪心)
[BZOJ4391][Usaco2015 dec]High Card Low Card(贪心) 题面 BZOJ 题解 预处理前缀后缀的结果,中间找个地方合并就好了. #include<iostr ...
- 【题解】P3129高低卡(白金)High Card Low Card
[题解][P3129 USACO15DEC]高低卡(白金)High Card Low Card (Platinum) 考虑贪心. 枚举在第几局改变规则,在改变规则之前,尽量出比它大的最小的牌,在改变规 ...
- 【题解】P1712 [NOI2016]区间(贪心+线段树)
[题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...
- [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 ...
- 【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 ...
- [bzoj4391] [Usaco2015 dec]High Card Low Card 贪心 线段树
---题面--- 题解: 观察到以决策点为分界线,以点数大的赢为比较方式的游戏都是它的前缀,反之以点数小的赢为比较方式的都是它的后缀,也就是答案是由两段答案拼凑起来的. 如果不考虑判断胜负的条件的变化 ...
- 【刷题】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 ...
- [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 ...
- Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)
题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...
随机推荐
- 看雪CTF第十五题
1.直接运行起来,再用OD附加 在此处luajit加载并调用main函数 004021C7 E8 64FE0000 call CrackMe. ; luaL_newstate 004021CC 8BF ...
- java-信息安全(八)-迪菲-赫尔曼(DH)密钥交换
概述 信息安全基本概念: DH(Diffie–Hellman key exchange,迪菲-赫尔曼密钥交换) DH 是一种安全协议,,一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一 ...
- Go的微服务库kite
Kite Kite是用Go开发的一套RPC库,很适合作为分布式微服务的开发框架. Kite 的传输层使用 SockJS 提供的WebSocket服务, 浏览器Javascript也可以连接到Kite上 ...
- [Artoolkit] ARToolKit's SDK Structure on Android
Most applications on Android are developed in Java, and Android provides a rich framework of classes ...
- JSON的多种转换
String message = httpSend(url, empName, loginPassWd); // 解析json字符串 message = message.replaceAll(&quo ...
- 国外源码精品-Android-PullToRefresh 简介与DEMO导入
转载地址:http://my.oschina.net/cuitongliang/blog/170708 (一)&&http://my.oschina.net/cuitongliang/ ...
- Ubuntu屏幕录像软件推荐-Kazam
sudo apt-get install kazam https://blog.csdn.net/weixin_40153532/article/details/79337630
- cmake构建时指定编译器架构(x86 or x64)
vs2015 x64编译器为例,cmake命令如下: cmake -G "Visual Studio 14 Win64" path\to\source\dir 去掉Win64,就是 ...
- 深度学习(TensorFlow)环境搭建:(一)硬件选购和主机组装
一.硬件采购 近年来,人工智能AI越来越多被人们所了解,尤其是AlphaGo的人机围棋大战之后,机器学习的热潮也随之高涨.最近,公司采购了几批设备,通过深度学习(TensorFlow)来研究金融行业相 ...
- [原]Jenkins(十)---jenkins注册管理员admin并赋所有权限给admin
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...