BZOJ2862 : 分糖果
二分答案$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 : 分糖果的更多相关文章
- CSDN 分糖果算法的思路和求助
昨天晚上 在csdn上做了一道分糖果的题目,我自个测的是没有问题,但是提交答案后,老失败,提示 你的程序正常运行并输出了结果,但是答案错误你的程序输出结果与测试数据中的输出结果不符 我先把自个思路说一 ...
- hunnu11543:小明的烦恼——分糖果
Problem description 小明在班里一直是个非常公正的孩子.这点同学和老师都非常清楚,这不,老师每周都会从家里带来一些糖果.然后叫小明把糖果分给其它小朋友,但这个班里的同学都有一个非 ...
- [LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现
[LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现 原题: There are N children standing in a line. ...
- C语言 · 分糖果
历届试题 分糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一 ...
- 蓝桥杯 历届试题 PREV-32 分糖果
历届试题 分糖果 时间限制:1.0s 内存限制:256.0MB 问题描述 有n个小朋友围坐成一圈.老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边 ...
- 牛客 2018NOIP 模你赛2 T2 分糖果 解题报告
分糖果 链接:https://www.nowcoder.com/acm/contest/173/B 来源:牛客网 题目描述 \(N\) 个小朋友围成一圈,你有无穷个糖果,想把其中一些分给他们. 从某个 ...
- 51nod——1402最大值、2479小b分糖果 (套路)
1402最大值:正向从1到n,如果没有限制,就依次递增1,如果有限制,就取那个限制和递增到这的最小值.这样保证1和每个限制点后面都是符合题意的递增,但是限制点前面这个位置可能会有落差(之前递增多了). ...
- 58同城笔试题:数组去重;分饼干(分糖果);最小路径和(leetcode64)
1. 数组去重 题目描述 /** * 有序数组去重 * 输出最终的数字个数 * 输入:1,2,2 * 输出:2 * @author Turing * */ 代码 import java.util.*; ...
- HNUSTOJ-1639 分糖果(几何)
1639: 分糖果 时间限制: 1 Sec 内存限制: 128 MB提交: 261 解决: 118[提交][状态][讨论版] 题目描述 为了实验室的发展,吴大大采购了一箱零食O(∩_∩)O~~ 在 ...
随机推荐
- Vector3.Lerp 插值
Vector3.Lerp 插值 static function Lerp (from : Vector3, to : Vector3, t : float) : Vector3 Description ...
- Sqli-LABS通关笔录-1
在第一个关卡当中还是学到些知识. 1.注释语句多试试其他的几个 2.不报错可能是前面的语句没有错误,union没有得到执行. http://127.0.0.1/sql/Less-1/index.php ...
- 【Hibernate】Hibernate系列2之Session详解
Session详解 2.1.概述-一级缓存 2.2.操作session缓存方法 2.3.数据库隔离级别 2.4.持久化状态 2.5.状态转换 2.6.存储过程与触发器
- 【SpringMVC】SpringMVC系列9之Model数据返回到View
9.Model数据返回到View 9.1.概述 Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体 ...
- string s = null 和 string s = “”的区别
string s = null; 表示一个空串,没有占用了空间,不在内存中开辟空间 string s = "";在内存中开辟空间,但空间中没有值(""也是一个字 ...
- .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(附插件安装教程2012-10-13更新) 完全破解+使用教程
原文来自VAllen cnblogs 一.使用教程1.解压后,双击Reflector.exe,如果有选择默认版本的.Net Framework,根据需要选择即可.你选择的版本不同则出现的默认程序集也不 ...
- First Position of Target
For a given sorted array (ascending order) and a target number, find the first index of this number ...
- SpringJDBC的简单应用
此处写上应用JdbcTemplate的dao操作数据库的一些代码(含基本的增删改查,注:重点是查询出多条语句的写法): package org.sakaiproject.zhaorui.dao.imp ...
- BaseColumns以及自定义Column
android provider 包下自带的BaseColumn /* * Copyright (C) 2006 The Android Open Source Project * * License ...
- August 4th, 2016, Week 32nd, Thursday
How does the world look through your eyes? 你眼中的世界是什么样的呢? This morning I saw a girl that is just the ...