CF Round 622 div2#

A.简单模拟

B.数学##

题意:

某人A参加一个比赛,共n人参加,有两轮,给定这两轮的名次x,y,总排名记为两轮排名和x+y,此值越小名次越前,并且对于与A同分者而言,A名次在最末,求A最好名次和最坏名字。

分析:

我们先考虑最坏怎么来

最劣的时候就是尽可能多的人总分与A相同

那么对于和为x+y的有序数对组合有x+y-1个,除去自己就是x+y-2个,而第一名位置是1,所以最劣位置是x+y-1,取min(x+y-1,n)即使最劣位置

而对于最优位置,x+y<=n,从上面那个组对的方式衍生开来,每队后面一个元素+1即可

而大于n,emmm...小数据找下规律吧,网上很多解释都有一定的瑕疵,我感觉多半是个结论。

AC代码

#include<iostream>
#include<cstring>
using namespace std;
#define INF 1e10+5
#define MAXN 105
#define MINN -105
typedef long long int LL;
void solve()
{
int n,x,y,ans1=1,ans2;
cin>>n>>x>>y;
ans2=min(n,x+y-1);
if(x+y>n)
{
ans1=min(n,x+y-n+1);
}
cout<<ans1<<" "<<ans2<<endl;
}
int main()
{
int t;
cin>>t;
for(int i=0;i<t;i++)
{
solve();
}
return 0;
}

C1&C2.分治,单调栈##

c2相对于c1而言n的数据扩大了(n≤5000001)

题意

Berland要起摩天大厦了。所有的摩天大厦都在高速公路附近建。发展商买了 nnn 块地准备建 nnn 栋摩天大厦,一块地一栋。

当规划一间摩天大厦的时候,建筑师要考虑一些条件。

第一,因为每栋摩天大厦有不同的用途,所以每栋摩天大厦都有自己的层数限制,也就是说,这栋摩天大厦的高度不能超过给定的值 mim_imi​。

第二,根据城市的建设规则,一栋摩天大厦不能同时在左右有比它高的摩天大厦。

如果规范地表示,让我们把地编上一个编号从 111 到 nnn。那么如果在第 iii 块地的摩天大厦有 aia_iai​ 层,那么我们需要保证 1≤ai≤mi1 \le a_i \le m_i1≤ai​≤mi​。另外,这里不可以有整数 jjj 和 kkk 满足 j<i<kj < i < kj<i<k 并且 aj>ai<aka_j > a_i < a_kaj​>ai​<ak​。第 j,kj, kj,k 块地并不需要与第 iii 块地相邻。

发展商想要使得每块地上摩天大厦的楼层数之和最大。也请帮他找出在任意一个最优状况中每个摩天大厦的高度。也就是,要让建筑师考虑的条件都符合,而且要使得每块地上摩天大厦的楼层数之和最大。

分析

题目无非就是维护一个单峰序列,使得他的序列和最大。

那么我们不妨从左往右处理一个单调栈s[i],用来记录各个上升点对于的位置,用l[i]来记录以i为峰自左到右的总和。而用lst[i]记录对于i而言,到之前的某个位置lst[i]之间都是需要被削小成a[i]

那么就有关系l[i]=l[lst[i]]+(i-lst[i])*a[i];

那么每次i入栈之时无非就拿栈顶元素与a[i]比较,如果大,记录lst,入栈,否则一直出栈。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define INF 1e10+5
#define MAXN 500050
#define MINN -105
typedef long long int LL;
int main()
{
LL n;
LL a[MAXN],l[MAXN],r[MAXN],lst[MAXN],s[MAXN];
LL curmaxn=0,index=0;
LL tp=0;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
cin>>n;
memset(lst,0,sizeof(lst));
s[0]=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
while(a[s[tp]]>a[i]&&tp)tp--;
lst[i]=s[tp];
s[++tp]=i; }
for(int i=1;i<=n;i++)l[i]=l[lst[i]]+(i-lst[i])*a[i];
reverse(a+1,a+n+1);
tp=0;
for(int i=1;i<=n;i++)
{
lst[i]=0;
while(a[s[tp]]>a[i]&&tp)tp--;
lst[i]=s[tp];
s[++tp]=i; }
for(int i=1;i<=n;i++)r[i]=r[lst[i]]+(i-lst[i])*a[i];
reverse(r+1,r+n+1);
for(int i=1;i<=n;i++)
if(l[i]+r[i+1]>=curmaxn)
{
index=i;
curmaxn=l[i]+r[i+1];
}
reverse(a+1,a+n+1);
for(int i=index+2;i<=n;i++)
a[i]=min(a[i-1],a[i]);
for(int i=index-1;i>=1;i--)
a[i]=min(a[i+1],a[i]);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}

CF round #622 (div2)的更多相关文章

  1. CF Round #580(div2)题解报告

    CF Round #580(div2)题解报告 T1 T2 水题,不管 T3 构造题,证明大约感性理解一下 我们想既然存在解 \(|a[n + i] - a[i]| = 1\) 这是必须要满足的 既然 ...

  2. [CF Round #295 div2] C. DNA Alignment 【观察与思考0.0】

    题目链接:C. DNA Alignment 题目大意就不写了,因为叙述会比较麻烦..还是直接看英文题面吧. 题目分析 经过观察与思考,可以发现,构造的串 T 的每一个字符都与给定串 S 的每一个字符匹 ...

  3. [CF Round #294 div2] E. A and B and Lecture Rooms 【树上倍增】

    题目链接:E. A and B and Lecture Rooms 题目大意 给定一颗节点数10^5的树,有10^5个询问,每次询问树上到xi, yi这两个点距离相等的点有多少个. 题目分析 若 x= ...

  4. [CF Round #294 div2] D. A and B and Interesting Substrings 【Map】

    题目链接:D. A and B and Interesting Substrings 题目大意 给定26个小写字母的权值,一共26个整数(有正有负). 给定一个小写字母组成的字符串(长度10^5),求 ...

  5. A. Grasshopper And the String(CF ROUND 378 DIV2)

    A. Grasshopper And the String time limit per test 1 second memory limit per test 256 megabytes input ...

  6. A. Alyona and Numbers(CF ROUND 358 DIV2)

    A. Alyona and Numbers time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. CF Round#436 div2

    额,这次的题目其实挺智障的.所以通过这次比赛,我也发现了自己是一个智障.... 不说太多,说多是泪... A. Fair Game 题意:给你一个数组,看你能否把它均分为两个所有元素均相同的子数组. ...

  8. CF Round #569 Div2(contest1180)

    比赛链接:http://codeforces.com/contest/1180 Problem A 题意:给出n,问方块数.看图理解... Solution: 找一找规律就可以了,发现方块数为2n*( ...

  9. CF Round #687 Div2 简要题解

    题面 A 可以发现,最远的几个人一定是 \((1, 1), (1, m), (n, 1), (n, m)\) 中的一个,直接计算即可. B 注意到颜色数量很少,直接暴力枚举最终的颜色后模拟即可. C ...

随机推荐

  1. duilib之重写BUTTON按钮

    在使用BUTTON过程中,有时候发现一些属性不够用,或要从新绘制BUTTON按钮,那该如何操作?其实很简单,只需要继承CButtonUI类就行. 创建类CMyButtonUI,继承CButtonUI, ...

  2. Redis 详解 (四) redis的底层数据结构

    目录 1.演示数据类型的实现 2.简单动态字符串 3.链表 4.字典 5.跳跃表 6.整数集合 7.压缩列表 8.总结 上一篇博客我们介绍了 redis的五大数据类型详细用法,但是在 Redis 中, ...

  3. C++编程学习(九)this指针&友元函数

    mooc西工大魏英老师的课程通道关闭了,难受.现在边看工程代码边重温刷第一遍C++时候的知识点,顺序没有按照大纲的来,想到哪写到哪. this是干啥用的? 简介:在 C++ 中,每一个对象都能通过 t ...

  4. systemctl无法停掉keepalived

    这个问题搞了好半天,记录一下,启停都是用的systemctl 起初是测试vip漂移时候发现,主备节点都开启keepalived的状况下,一切正常,主节点的vip也可以访问. 第一次停掉主节点的keep ...

  5. 在 Windows 系统上安装 Jekyll

    目录 安装 Ruby 环境 用 Bundler 安装 Jekyll 本文是写给完全未用过 Ruby 乃至命令行工具者的.对于一般的开发者,Jekyll 官方文档的相关内容已然足够. 本文为钱院学辅技术 ...

  6. Ubuntu 14.04 安装 Dash to Dock

    每次打开或选择一个已经打开的应用都要把鼠标指到左上角,相当费事. Ubuntu 14.04 GNOME自带 Tweaks (系统中名为:优化工具),可以使界面如Windows般(最小化.最大化.底部任 ...

  7. spark任务日志配置

    样例代码: public class SparkTest { private static Logger logger = Logger.getLogger(SparkTest.class); pub ...

  8. Spark 资源调度 与 任务调度

    Spark 资源调度与任务调度的流程(Standalone): 启动集群后, Worker 节点会向 Master 节点汇报资源情况, Master掌握了集群资源状况. 当 Spark 提交一个 Ap ...

  9. windows driver 延时

    #define Delay_One_MicroSecond (-10) #define Delay_One_MilliSecond (Delay_One_MicroSecond * 1000) voi ...

  10. 电动车智能充电桩温度报警方案:SI24R2F

         由于现在电动自行车便捷不少民众的出行都选择这种交通工具出行,随着越来越多人都使用电动自行车,智能电动车充电桩的需求也在慢慢的变多,电动车智能充电桩的安全性也慢慢成为市场的焦点,对此SI24R ...