BZOJ_3316_JC loves Mkk_ 二分答案 + 单调队列

题意:

分析:

拆成链,二分答案,奇偶两个单调队列维护最大子段和,记录方案。

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define N 200050
#define LL long long
#define du double
int n, L, R,a[N];
int Q1[N], l1, r1, Q2[N], l2, r2;
du s[N], f[N], b[N];
LL gcd(LL x,LL y){
return y?gcd(y,x%y):x;
}
LL sum[N], mxsum, cnt;
bool check(du x){
int i;
for(i = 1;i <= 2 * n; i++){
b[i] = 1.0 * a[i] - x;
s[i] = s[i - 1] + b[i];
}
l1 = r1 = l2 = r2 = 0;
Q1[0] = Q2[0] = 0;
if(s[L] >= 0) { mxsum = sum[L] ; cnt = L ; return 1; }
for(i = L;i <= 2 * n; i++){
if(i & 1){
while(l1 < r1 && i - Q1[l1] > R) l1++;
f[i] = s[i] - s[Q1[l1]];
if(f[i] >= 0) { mxsum = sum[i] - sum[Q1[l1]] ; cnt = i - Q1[l1] ; return 1; }
while(l2 < r2 && s[i - L + 1] <= s[Q2[r2 - 1]]) r2--;
Q2[r2++] = i - L + 1;
}else{
while(l2 < r2 && i - Q2[l2] > R) l2++;
f[i] = s[i] - s[Q2[l2]];
if(f[i] >= 0) { mxsum = sum[i] - sum[Q2[l2]] ; cnt = i - Q2[l2] ; return 1; }
while(l1 < r1 && s[i - L + 1] <= s[Q1[r1 - 1]]) r1--;
Q1[r1++] = i - L + 1;
}
}
return 0;
}
int main(){
scanf("%d%d%d", &n, &L, &R);
L = (L + 1) /2 *2;
R = R /2 *2;
int i;
for(i = 1;i <= n; i++){
scanf("%d", &a[i]);
a[i + n] = a[i];
sum[i] = sum[i - 1] + a[i];
}
for(i = n + 1;i <= n + n; i++){
sum[i] = sum[i - 1] + a[i];
}
du l_ = 0, r_ = 1e9;
for(i = 1;i <= 40; i++){
du mid = (l_ + r_) / 2;
if(check(mid)) l_ = mid;
else r_ = mid;
}
if(mxsum % cnt ==0){
printf("%lld\n", mxsum / cnt);
}else{
LL p = gcd(mxsum, cnt);
printf("%lld/%lld\n", mxsum / p, cnt / p);
}
}

BZOJ_3316_JC loves Mkk_ 二分答案 + 单调队列的更多相关文章

  1. BZOJ5090 组题 BZOJ2017年11月月赛 二分答案 单调队列

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ5090 11月月赛A题 题意概括 给出n个数. 求连续区间(长度大于等于k)最大平均值. 题解 这题 ...

  2. [bzoj2806][Ctsc2012]Cheat(后缀自动机(SAM)+二分答案+单调队列优化dp)

    偷懒直接把bzoj的网页内容ctrlcv过来了 2806: [Ctsc2012]Cheat Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1943   ...

  3. [CTSC2012]熟悉的文章(广义后缀自动机+二分答案+单调队列优化DP)

    我们对作文库建出广义后缀自动机.考虑用\(SAM\)处理出来一个数组\(mx[i]\),表示从作文的第\(i\)个位置向左最远在作文库中出现的子串的长度.这个东西可以在\(SAM\)上跑\(trans ...

  4. luoguP1419 寻找段落(二分答案+单调队列)

    题意 给定一个长度为n的序列a1~an,从中选取一段长度在s到t之间的连续一段使其平均值最大.(n<=100000) 题解 二分答案平均值. judge时把每一个a[i]-mid得到b[i] 在 ...

  5. loj 10181 绿色通道 二分答案+单调队列DP

    空题段长度即为单调队列长度区间 每次二分答案进行check即可 #include<bits/stdc++.h> using namespace std; ; const int inf=0 ...

  6. P3957 跳房子(二分答案+单调队列优化DP)

    题目链接:https://www.luogu.org/contestnew/show/4468 题目大意:跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则 ...

  7. 洛谷 P3957 跳房子 —— 二分答案+单调队列优化DP

    题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 ...

  8. [NOIP2017普及组]跳房子(二分,单调队列优化dp)

    [NOIP2017普及组]跳房子 题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 nn 个格子, ...

  9. 感染(low)bfs 、感染(mid) 二分、感染(high) 二分 + 维护单调 队列去除无用的点

    感染(low) Description n户人家住在一条直线上,从左往右依次编号为1,2,-,n.起初,有m户人家感染了COVID-19,而接下来的每天感染的人家都会感染他家左右两家的人,问t天后总共 ...

随机推荐

  1. winform 写App.config配置文件——IT轮子系列(八)

    前言 在winform项目中,常常需要读app.config文件.如: var version = System.Configuration.ConfigurationManager.AppSetti ...

  2. python笔记--2--字符串、正则表达式

    字符串 ASCII码采用1个字节来对字符进行编码,最多只能表示256个符号. UTF-8以3个字节表示中文 GB2312是我国制定的中文编码,使用1个字节表示英语,2个字节表示中文:GBK是GB231 ...

  3. Day16 Django

    学Django之前,先看下http基础,老师的网页地址: web框架 - Yuan先生 - 博客园 http://www.cnblogs.com/yuanchenqi/articles/7690561 ...

  4. IT桔子沙龙之本地生活服务O2O探路者笔记整理

    这个沙龙活动侧重于创业融资与投资角度 主持人:真格基金投资分析师顾女士;E-mail:grace@zhenfund.com;新浪微博:@顾三小姐 赞助商七牛云的服务宣传:静态资源托管:上传下载全网加速 ...

  5. svn Server sent unexpected return value (403 Forbidden) in response to CHECKOUT

    今天,提交資料到公司svn服務器,但是一直提示 Server sent unexpected return value (403 Forbidden) in response to CHECKOUT ...

  6. php判断图片是否存在的几种方法

    在我们日常的开发中,经常需要用到判断图片是否存在,存在则显示,不存在则显示默认图片,那么我们用到的判断有哪些呢?今天我们就来看下几个常用的方法: 1.getimagesize()函数 getimage ...

  7. jquery touch 移动端上下滑动加载

    var touchStart, touchEnd, touchDiff = 80; $(window).on({ 'touchstart': function (e) { touchStart = e ...

  8. Django rest framework(7)----分页

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  9. Java多线程-概念与原理

    一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程.比如在 ...

  10. Struts标签库详解【3】

    struts2标签库详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri= ...