给定一个序列,要求相邻两个数至少选一个,求选出数的最大平均数和最大中位数

\(\text{sol}\):二分答案。

二分平均数\(\text{mid}\),将每个元素减去\(\text{mid}\),\(\text{DP}\)一遍求能选的最大总和,大于等于\(\text{0}\)即\(true\)

二分中位数\(\text{mid}\),小于\(\text{mid}\)的值记为\(-1\),大于等于\(\text{mid}\)的值记为\(1\),求选出最大总和,大于\(0\)即\(true\)(由于这里中位数取\(\lceil \frac{n}{2} \rceil\))

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define MAXN (int)(1e5+233)
#define MAXA (long long)(1e9+233)
int a[MAXN];
long long c[MAXN],b[MAXN];
int n;
long long maxn=0;
inline long long maxw(long long A,long long B) { return A>B?A:B; }
long long f[MAXN]; inline bool check_average(long long x)
{
for (int i=1;i<=n;i++) b[i]=c[i]-x;
// if (x==43333) for (int i=1;i<=n;i++) printf("%lld ",b[i]); puts("");
f[1]=b[1]; f[2]=maxw(b[2],b[1]+b[2]);
for (int i=3;i<=n;i++) f[i]=maxw(f[i-2],f[i-1])+b[i];
// if (x==43333) for (int i=1;i<=n;i++) printf("%lld ",f[i]); puts("");
return f[n-1]>=0||f[n]>=0;
}
inline double bina_average()
{
long long l=1,r=maxn*100000,mid;
while (l<r)
{
mid=((l+r+1)>>1);
if (check_average(mid)) l=mid;
else r=mid-1;
}
return ((double)(l))/100000.0000;
} inline bool check_median(int x)
{
f[1]=(int)(a[1]>=x?1:-1); f[2]=(int)(a[2]>=x?1:-1); if (f[1]==1) f[2]++;
for (int i=3;i<=n;i++)
f[i]=maxw(f[i-1],f[i-2])+(a[i]>=x?1:-1);
return f[n-1]>0||f[n]>0;
} inline int bina_median()
{
int l=1,r=maxn,mid;
while (l<r)
{
mid=((l+r+1)>>1);
if (check_median(mid)) l=mid;
else r=mid-1;
}
return l;
} int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
maxn=maxw(maxn,a[i]);
c[i]=a[i]*1ll*100000;
}
printf("%.5lf\n%d\n",bina_average(),bina_median());
return 0;
}

AtCoder Beginner Contest 236 E - Average and Median的更多相关文章

  1. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  2. AtCoder Beginner Contest 169 题解

    AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...

  3. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  4. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  5. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  6. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  7. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  8. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  9. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

  10. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】

    AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...

随机推荐

  1. 微信小程序基本总结

    小程序目录结构 project.config.json 配置项目文件,用的最多的就是配置是否开启HTTPS校检 app.js 设置一些全局的基础数据 app.json 设置底部tabbar,标题栏和路 ...

  2. VUE-使用touchstart、touchmove、touchend实现拖拽卡片列表,实现更新排序功能

    感谢本文参考地址,原文解析更加清晰如有需要请移步:https://blog.csdn.net/weixin_40400844/article/details/114849253 怕原链接失效,将代码拷 ...

  3. antv g6 出现 n.addEdge is not a function问题

    问题描述直接上图 解决方式就是将edge里面边的source和target对应的id换成字符串类型就行. 例如: edges: [ { id: 299, source": 3629.toSt ...

  4. uc 小游戏接入经验

    使用引擎,egret 相关资料: https://blog.csdn.net/weixin_42276579/article/details/107379544 https://minigame.uc ...

  5. heiamJava16IO流

    Java I/O流 按流的方向分 输入输出流 I表示intput(输入),是数据从硬盘文件读入到内存的过程,称之输入,负责读. O表示output(输出),是内存程序的数据从内存到写出硬盘文件的过程, ...

  6. 【线性DP】乌龟棋

    #include<bits/stdc++.h> using namespace std; int a[400],b[5]; int dp[50][50][50][50]; int main ...

  7. python3.5升级到3.6

    第一步: sudo apt-get install software-properties-common sudo add-apt-repository ppa:jonathonf/python-3. ...

  8. 【再学WPF】模板

    1 <!--设置所有的按钮样式--> 2 <Style TargetType="Button"> 3 <Setter Property="M ...

  9. Maven 中央仓库配置

    Maven 中央仓库配置 Maven 中央仓库地址大全 <!-- 1.阿里中央仓库(首推1) --> <repository> <id>alimaven</i ...

  10. kubeadm部署单master Kuberntes集群

    本文参考kubernetes docs 使用kubeadm创建single master的Kuberntes集群 虚机两台Centos75 Kubernetes Yum Repo采用国内阿里源 版本 ...