BZOJ 4411: [Usaco2016 Feb]Load balancing 线段树+二分
code:
#include <bits/stdc++.h>
#define N 100060
#define M 1000000
#define lson x<<1
#define rson x<<1|1
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,num[N*10],ans=N,X0,X1;
struct node
{
int x0,x1;
}t[N*10*4];
struct Point
{
int x,y;
friend bool operator<(Point a,Point b) { return a.y<b.y; }
}a[N];
void pushup(int x)
{
t[x].x0=t[lson].x0+t[rson].x0;
t[x].x1=t[lson].x1+t[rson].x1;
}
void build(int x,int l,int r)
{
if(l==r)
{
t[x].x0=num[l];
t[x].x1=0;
return;
}
int mid=(l+r)>>1;
build(lson,l,mid);
build(rson,mid+1,r);
pushup(x);
}
void update(int x,int l,int r,int p)
{
if(l==r)
{
t[x].x0--,t[x].x1++;
return;
}
int mid=(l+r)>>1;
if(p<=mid) update(lson,l,mid,p);
else update(rson,mid+1,r,p);
pushup(x);
}
int ask(int x,int l,int r,int x0,int x1)
{
if(l==r) return l;
int mid=(l+r)>>1;
int sum0=x0+t[lson].x0,sum1=x1+t[lson].x1;
if(max(sum0,sum1)>=max(t[1].x0-sum0,t[1].x1-sum1))
{
return ask(lson,l,mid,x0,x1);
}
else
{
return ask(rson,mid+1,r,sum0,sum1);
}
}
void qsum(int x,int l,int r,int L,int R)
{
if(L>R) return;
if(l>=L&&r<=R)
{
X0+=t[x].x0;
X1+=t[x].x1;
return;
}
int mid=(l+r)>>1;
if(L<=mid) qsum(lson,l,mid,L,R);
if(R>mid) qsum(rson,mid+1,r,L,R);
}
int main()
{
// setIO("input");
int i,j;
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d%d",&a[i].x,&a[i].y), num[a[i].x]++;
sort(a+1,a+1+n);
build(1,1,M);
for(i=1,j;i<=n;i=j)
{
j=i;
while(j<=n&&a[j].y==a[i].y) update(1,1,M,a[j].x),++j;
int pos=ask(1,1,M,0,0);
X0=0,X1=0,qsum(1,1,M,1,pos);
ans=min(ans,max(X0,X1));
X0=0,X1=0,qsum(1,1,M,1,pos-1);
ans=min(ans,max(t[1].x0-X0,t[1].x1-X1));
}
printf("%d\n",ans);
return 0;
}
BZOJ 4411: [Usaco2016 Feb]Load balancing 线段树+二分的更多相关文章
- BZOJ 1593: [Usaco2008 Feb]Hotel 旅馆 [线段树]
传送门 题意: 操作1:找长为$len$的空区间并填满,没有输出$0$ 操作2:将$[l,r]$之间的区间置空 我真是太弱了这种线段树还写了一个半小时,中间为了查错手动模拟了$30min$线段树操作, ...
- [bzoj4411] [Usaco2016 Feb]Load balancing
先离散化一下(也可以不用 枚举横坐标,用线段树维护两边纵坐标上的节点数. 每次在线段树上二分...(感觉似乎树状数组也行? #include<cstdio> #include<ios ...
- BZOJ 3939 [Usaco2015 Feb]Cow Hopscotch ——线段树 CDQ分治
显然dp[i][j]=ps[i-1][j-1]-sigma(dp[k<i][l<j],a[i][j]=a[k][l]) 考虑对于每一种颜色都开一颗区间线段树,但是空间不够. 所以我们可以动 ...
- bzoj千题计划180:bzoj4411: [Usaco2016 Feb]Load balancing
http://www.lydsy.com/JudgeOnline/problem.php?id=4411 用树状数组维护扫描线 一个树状数组维护扫描线之上的y<=i点,另一个维护扫描线之下y&l ...
- BZOJ4411——[Usaco2016 Feb]Load balancing
1.题意: 给出N个平面上的点.保证每一个点的坐标都是正奇数. 你要在平面上画两条线,一条是x=a,一条是y=b,且a和b都是偶数. 直线将平面划成4个部分,要求包含点数最多的那个部分点数最少. 2. ...
- [BZOJ 2653] middle(可持久化线段树+二分答案)
[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序 ...
- Codeforces Gym 100803G Flipping Parentheses 线段树+二分
Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
Intervals 题目连接: http://codeforces.com/gym/100231/attachments Description 给你n个区间,告诉你每个区间内都有ci个数 然后你需要 ...
- hdu4614 线段树+二分 插花
Alice is so popular that she can receive many flowers everyday. She has N vases numbered from 0 to N ...
随机推荐
- 用ab每隔30分钟并发一次休息10分钟
linux脚本监控程序运行情况(重启程序)主要有两种情况:一种是一个可执行文件:如shell脚本文件:另一种是使用python打开的多个程序.第一种:它的进程名字由路径名字和程序名字组成,比如:我有个 ...
- 【spring boot】【redis】spring boot基于redis的LUA脚本 实现分布式锁
spring boot基于redis的LUA脚本 实现分布式锁[都是基于redis单点下] 一.spring boot 1.5.X 基于redis 的 lua脚本实现分布式锁 1.pom.xml &l ...
- 安装软件时出现这样错误:文件“proe50-1a.bin”无法在“C:\User\ZFTL\Desktop\proe50”定位,请插入正确的磁盘或选择其他文件夹
把里面的文件改成proe50-1a.bin就可以了.
- VC/MFC如何添加启动界面
2015-05 转自 香远益清原文VC/MFC如何添加启动界面 1.基于框架类的应用程序添加启动画面的步骤(利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h ...
- HTML5深入学习之 WebSQL 数据库
概述 WebSQL 并不是 HTML5规范的一部分,而是一个独立的规范,它可以用来做一些离线应用 核心API openDatabase() => 用来打开或创建数据库(没有时则创建,有则打开) ...
- NGINX一览无余
Nginx 是如何实现高并发的? 异步,非阻塞,使用了epoll 和大量的底层代码优化. 如果一个server采用一个进程负责一个request的方式,那么进程数就是并发数.正常情况下,会有很多进程一 ...
- selenium.获取浏览器大小、设置浏览器位置、最大化浏览器
此篇博客学习控制浏览器的api,分别有: get_window_size() 获取浏览器大小 set_window_size() 设置浏览器位置 get_window_position() 获取浏览器 ...
- .Net core3.0 集成swagger5.0上传文件
.Net core 3.0已经更新了,相信有挺多博主大佬们都更新了如何在.Net core3.0使用swagger,这里就不详细说了. 我们知道,如果.net core 2.x使用swagger上传文 ...
- cad 画图面板的尺寸大小定义
输入limits 输入左下角点为 0,0 输入右上角点为大家需要的数 这里为100,50 输入zoom 输入a 就可以实现自定义编辑 注意事项 如果在你已经操作过的图纸上可能会失效 重新建一张图纸就 ...
- less使用手记 主题切换 全局import less
实现主题颜色切换 components/theme.less,跟据@theme读取主题布局 @theme: dark; .dark-theme (@transparency) when (@theme ...