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 ...
随机推荐
- 一个刚入行的BIOS工程师的自我简介
现在是北京时间2019年11月28日,大学毕业已经工作四个多月.说来也是奇怪,大学里面明明主修机械电子工程,几乎是纯机械方向,毕业之后的工作却与主修的课程毫无关系.因为对机械这一行业毫无兴趣,大学里面 ...
- Application.mk文件官方使用说明
本文档介绍了 ndk-build 所使用的 Application.mk 编译文件. 我们建议先阅读概念页面,然后再阅读本页面. 概览 Application.mk 指定了 ndk-build 的项目 ...
- 关于mysql的null相关查询的一些坑
我们先看一下效果,然后在解释,示例如下: mysql> create table test5 (a int not null,b int,c varchar(10)); Query OK, 0 ...
- .NET / C# 时间与时间戳的转换
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数. 我们在计算时间戳时应为1970年01月01日到指定时间. 应当注 ...
- 象棋中“车”的攻击范围_C#
如题: var a = new String[8,8]; int h, l; Console.WriteLine("输入车所在的行(0-7):"); h = int.Parse(C ...
- MongoDB netcore
mongodb.driver mongodb.driver.core url: http://dl.mongodb.org/dl/win32/x86_64 ********************* ...
- v2 配置
记录一下怕自己忘记了 v2配置 v2加速 cdn加速 hostwind 服务器 namesilo 域名网站
- UIPath RPA 自动化脚本 机器人从入门到精通
本文链接:https://blog.csdn.net/qq_27256783/article/details/93619818 一.UiPath介绍 UiPath 是RPA(Robotic Proce ...
- 2019-07-29 ThinkPHP简单的增删改查
在model里面,建立表名Model.class.php的控制器,用以连接数据表,代码如下 namespace Home\Model; use Think\Model; class NewsModel ...
- Vue.js---指令与事件、语法糖
指令与事件 指令(Directives)是Vue.js模板中最常用的一项功能,它带有前缀v-,指令的职责就是当其表达式的值改变时,相应地将某些行为应用到DOM上. v-if: 显示这段文本 当数据sh ...