正解:贪心+线段树/set库

解题报告:

算辣直接甩链接qwq

恩这题就贪心?从前往后从后往前各推一次然后找一遍哪个地方最大就欧克了,正确性很容易证明

(这里有个,很妙的想法,就是,从后往前推从前往后推可能会有相同的牌嘛,但是其实这个是没有个关系的!

因为,既然有相同的牌那么就必定有多了的牌,然后如果这个多了的牌比重了的牌大我们就放前面,比重了的小我们就放后面,这样就不会影响答案的正确性了……

哇我觉得这个想法真是太神仙了像我这种菜鸡自己单独想的话是绝对想不到这个的我可能就直接放弃贪心了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库的更多相关文章

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

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

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

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

  3. 【题解】P1712 [NOI2016]区间(贪心+线段树)

    [题解]P1712 [NOI2016]区间(贪心+线段树) 一个observe是,对于一个合法的方案,将其线段长度按照从大到小排序后,他极差的来源是第一个和最后一个.或者说,读入的线段按照长度分类后, ...

  4. [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 ...

  5. 【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 ...

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

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

  7. 【刷题】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 ...

  8. [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 ...

  9. Codeforces 675E Trains and Statistic(DP + 贪心 + 线段树)

    题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和. 好难,不会写. ...

随机推荐

  1. 【webssh】网页上的SSH终端

    [webssh] ——记两天来比较痛苦的历程 广义上来说,webssh泛指一种技术可以在网页上实现一个SSH终端.从而无需Xshell之类的模拟终端工具进行SSH连接,将SSH这一比较低层的操作也从C ...

  2. nginx 配置信息

    主配置文件: cat /etc/nginx/nginx.conf# For more information on configuration, see:# * Official English Do ...

  3. 13组合模式Composite

    一.什么是组合模式 Composite模式也叫组合模式,是构造型的设 计模式之一.通过递归手段来构造树形的对象结 构,并可以通过一个对象来访问整个对象树. 二.组合模式的结构 三.组合模式的角色和职责 ...

  4. linux(centos) 添加系统环境变量

    系统环境变量,其实就就是一个添加至系统环境中的路径变量. 编译php的扩展时经常会在扩展包源码目录里执行phpize,每次执行的时候都要敲入一大堆目录,诸如:/usr/local/php/bin/ph ...

  5. 延续(continuation)

    首先看下延续的定义: 续延是在运行中被暂停了的程序:即含有计算状态的单个函数型对象.当这个对象被求值时,就会在它上次停下来的地方重新启动之前保存下来的计算 在计算机科学和程序设计领域,延续是计算机程序 ...

  6. NHibernate之旅(21):探索对象状态

    本节内容 引入 对象状态 对象状态转换 结语 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的 ...

  7. Scala断言

    断言:提供了一组断言函数以用作在代码中记录和动态检查不变量的方式. import scala.Predef._ def addNaturals(nats: List[Int]): Int = { // ...

  8. Python基础爬虫

    搭建环境: win10,Python3.6,pycharm,未设虚拟环境 之前写的爬虫并没有架构的思想,且不具备面向对象的特征,现在写一个基础爬虫架构,爬取百度百科,首先介绍一下基础爬虫框架的五大模块 ...

  9. zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection

    zabbix监控告警Received empty response from Zabbix Agent Assuming that agent dropped connection错误 查看zabbi ...

  10. 石子合并 区间dp模板

    题意:中文题 Description 在操场上沿一直线排列着 n堆石子.现要将石子有次序地合并成一堆.规定每次只能选相邻的两堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.允许在第一次合 ...