二分答案$x$表示最大的一段的和。

设$f[i]$表示前$i$个最多分几段,满足最大的一段不超过$x$,若$f[n]\geq k$,则可行,

则$f[i]=\max(f[j])+1,sum[i]-sum[j]\leq x$。

用Treap优化DP,$O(n\log^2n)$。

同理再次二分得到最小的$x$,使得该限制下最少的段数$\leq k$。

则$ans=\max(x_0,x_1)$。

#include<cstdio>
#include<cstdlib>
const int N=20010,inf=1000000000;
int n,k,i,l,r,mid,ans0,ans1,f,sum[N];
inline int max(int a,int b){return a>b?a:b;}
inline int min(int a,int b){return a<b?a:b;}
struct node{
int p,val,vmx,vmi,mx,mi;node*l,*r;
node(){val=p=0,vmx=mx=-inf,vmi=mi=inf;l=r=NULL;}
inline void up(){
mx=max(vmx,max(l->mx,r->mx));
mi=min(vmi,min(l->mi,r->mi));
}
}*blank=new(node),pool[N],*cur=pool,*T;
inline void Rotatel(node*&x){node*y=x->r;x->r=y->l;x->up();y->l=x;y->up();x=y;}
inline void Rotater(node*&x){node*y=x->l;x->l=y->r;x->up();y->r=x;y->up();x=y;}
void Ins(node*&x,int p,int v){
if(x==blank){
x=cur++;x->val=p;x->l=x->r=blank;x->vmx=x->mx=x->vmi=x->mi=v;x->p=std::rand();
return;
}
x->mx=max(x->mx,v);
x->mi=min(x->mi,v);
if(p==x->val){
x->vmx=max(x->vmx,v);
x->vmi=min(x->vmi,v);
return;
}
if(p<x->val){
Ins(x->l,p,v);
if(x->l->p>x->p)Rotater(x);
}else{
Ins(x->r,p,v);
if(x->r->p>x->p)Rotatel(x);
}
}
int Askmx(node*&x,int p){
if(x==blank)return -inf;
if(p==x->val)return max(x->vmx,x->r->mx);
if(p<x->val)return max(x->vmx,max(x->r->mx,Askmx(x->l,p)));
return Askmx(x->r,p);
}
int Askmi(node*&x,int p){
if(x==blank)return inf;
if(p==x->val)return min(x->vmi,x->r->mi);
if(p<x->val)return min(x->vmi,min(x->r->mi,Askmi(x->l,p)));
return Askmi(x->r,p);
}
int main(){
blank->l=blank->r=blank;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)scanf("%d",&sum[i]),sum[i]+=sum[i-1];
l=-inf,r=ans0=ans1=inf;
while(l<=r){
mid=(l+r)>>1;
cur=pool,Ins(T=blank,0,0);
for(i=1;i<=n;i++)Ins(T,sum[i],f=Askmx(T,sum[i]-mid)+1);
if(f>=k)r=(ans0=mid)-1;else l=mid+1;
}
l=-inf,r=inf;
while(l<=r){
mid=(l+r)>>1;
cur=pool,Ins(T=blank,0,0);
for(i=1;i<=n;i++)Ins(T,sum[i],f=Askmi(T,sum[i]-mid)+1);
if(f<=k)r=(ans1=mid)-1;else l=mid+1;
}
return printf("%d",max(ans0,ans1)),0;
}

  

BZOJ2862 : 分糖果的更多相关文章

  1. CSDN 分糖果算法的思路和求助

    昨天晚上 在csdn上做了一道分糖果的题目,我自个测的是没有问题,但是提交答案后,老失败,提示 你的程序正常运行并输出了结果,但是答案错误你的程序输出结果与测试数据中的输出结果不符 我先把自个思路说一 ...

  2. hunnu11543:小明的烦恼——分糖果

    Problem description   小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非 ...

  3. [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现

    [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现 原题: There are N children standing in a line. ...

  4. C语言 · 分糖果

    历届试题 分糖果   时间限制:1.0s   内存限制:256.0MB      问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一 ...

  5. 蓝桥杯 历届试题 PREV-32 分糖果

    历届试题 分糖果   时间限制:1.0s   内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边 ...

  6. 牛客 2018NOIP 模你赛2 T2 分糖果 解题报告

    分糖果 链接:https://www.nowcoder.com/acm/contest/173/B 来源:牛客网 题目描述 \(N\) 个小朋友围成一圈,你有无穷个糖果,想把其中一些分给他们. 从某个 ...

  7. 51nod——1402最大值、2479小b分糖果 (套路)

    1402最大值:正向从1到n,如果没有限制,就依次递增1,如果有限制,就取那个限制和递增到这的最小值.这样保证1和每个限制点后面都是符合题意的递增,但是限制点前面这个位置可能会有落差(之前递增多了). ...

  8. 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)

    1. 数组去重 题目描述 /** * 有序数组去重 * 输出最终的数字个数 * 输入:1,2,2 * 输出:2 * @author Turing * */ 代码 import java.util.*; ...

  9. HNUSTOJ-1639 分糖果(几何)

    1639: 分糖果 时间限制: 1 Sec  内存限制: 128 MB提交: 261  解决: 118[提交][状态][讨论版] 题目描述 为了实验室的发展,吴大大采购了一箱零食O(∩_∩)O~~ 在 ...

随机推荐

  1. ruby代码重构第一课

    (文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 新手写代码的时候往往会出现很多重复的代码没有提取出来,大师高瞻远瞩总能提点很多有意义的改进,今天重 ...

  2. [codeforces 241]A. Old Peykan

    [codeforces 241]A. Old Peykan 试题描述 There are n cities in the country where the Old Peykan lives. The ...

  3. [LA3026]Period

    [LA3026]Period 试题描述 For each prefix of a given string S with N characters (each character has an ASC ...

  4. 谷歌、百度、1万ip能赚多少钱?1000IP能够值多少钱呢?

    谷歌.百度.1万ip能赚多少钱?1000IP能够值多少钱呢? (2014-04-03 11:50:52) 转载▼ 标签: 广告联盟 百度联盟 谷歌联盟 ip赚钱       很多在人问:谷歌.百度:1 ...

  5. mysql工具

    MySQL工具汇总 收录了MySQL相关有用的工具.工具包含:性能测试,状态分析,SQL路由等方面 本文汇总了和MySQL运维开发相关的所有工具,并会持续更新 工具套件集 percona-toolki ...

  6. Ubuntu 更新源

    1.首先备份Ubuntu12.04源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表) 2.修改更新源 ...

  7. Http协议之Get和Post的区别

    get(默认值)是通过URL传递表单值,post传递的表单值是隐藏到http报文体中,url中看不到.区别(常考):get是通过url传递表单值,post通过url看不到表单域的值:get传递的数据量 ...

  8. Win7中打开chm文件内容无法显示问题

    今天下载了一个linux的2.6.22.14中文文档,下载后发现显示异常   www.2cto.com  怀疑是API的问题,连续从几个网站下来了很多版本,发现都存在这个问题,然后就开始自己的身上找原 ...

  9. IIS网站服务器性能优化指南(转载)

    原文网址:http://www.phontol.com/20090507_419416_1.html       Windows Server自带的互联网信息服务器(Internet Informat ...

  10. Laravel 4 系列入门教程(一)

    默认条件 本文默认你已经有配置完善的PHP+MySQL运行环境,懂得PHP网站运行的基础知识.跟随本教程走完一遍,你将会得到一个基础的包含登录的简单blog系统,并将学会如何使用一些强大的Larave ...