BZOJ4411——[Usaco2016 Feb]Load balancing
#include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; #define M 100010 inline int read(){ char ch = getchar(); int x = 0, f = 1; while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar(); } while('0' <= ch && ch <= '9'){ x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } struct Node{ int x, y; inline bool operator < (const Node& rhs) const{ return y < rhs.y; } } a[M]; pair<int , int> li[M]; int C[2][M], tt; int n; inline void change(int c[], int x, int y){ for(; x <= n; x += (x & -x)) c[x] += y; } inline int query(int c[], int x){ int res = 0; for(; x > 0; x -= (x & -x)) res += c[x]; return res; } inline bool check(int x){ int size0 = n, size1 = 0; memset(C, 0, sizeof(C)); for(int i = 1; i <= n; i ++) change(C[0], a[i].x, 1); int it0 = 1, it1 = n; for(int t, j = 1, i = 1; i <= n; i = j){ while(a[j].y == a[i].y){ change(C[0], a[j].x, -1), size0 --; change(C[1], a[j].x, 1), size1 ++; j ++; } while(it0 <= n && query(C[0], it0) <= x) it0 ++; it0 --; while(it1 > 0 && query(C[1], it1) > x) it1 --; t = min(it0, it1); if(size0 - query(C[0], t) <= x && size1 - query(C[1], t) <= x) return 1; } return 0; } int main(){ n = read(); for(int i = 1; i <= n; i ++) a[i].x = read(), a[i].y = read(), li[i].first = a[i].x, li[i].second = i; sort(li + 1, li + n + 1); tt = 0; li[0].first = -2147483647; for(int i = 1; i <= n; i ++){ if(li[i].first != li[i - 1].first) tt ++; a[li[i].second].x = tt; } sort(a + 1, a + n + 1); int l = 1, r = n, ans = n; while(l <= r){ int mid = (l + r) / 2; if(check(mid)) r = (ans = mid) - 1; else l = mid + 1; } printf("%d\n", ans); return 0; }
BZOJ4411——[Usaco2016 Feb]Load balancing的更多相关文章
- [bzoj4411] [Usaco2016 Feb]Load balancing
先离散化一下(也可以不用 枚举横坐标,用线段树维护两边纵坐标上的节点数. 每次在线段树上二分...(感觉似乎树状数组也行? #include<cstdio> #include<ios ...
- bzoj千题计划180:bzoj4411: [Usaco2016 Feb]Load balancing
http://www.lydsy.com/JudgeOnline/problem.php?id=4411 用树状数组维护扫描线 一个树状数组维护扫描线之上的y<=i点,另一个维护扫描线之下y&l ...
- BZOJ 4411: [Usaco2016 Feb]Load balancing 线段树+二分
code: #include <bits/stdc++.h> #define N 100060 #define M 1000000 #define lson x<<1 #def ...
- bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解
辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT 先贴代码,有空再填坑 4409[Usaco2016 Feb]Circular barn #include <io ...
- 【架构】How To Use HAProxy to Set Up MySQL Load Balancing
How To Use HAProxy to Set Up MySQL Load Balancing Dec 2, 2013 MySQL, Scaling, Server Optimization U ...
- CF# Educational Codeforces Round 3 C. Load Balancing
C. Load Balancing time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Educational Codeforces Round 3 C. Load Balancing 贪心
C. Load Balancing 题目连接: http://www.codeforces.com/contest/609/problem/C Description In the school co ...
- UVA 12904 Load Balancing 暴力
Load Balancing Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/vi ...
- Load Balancing 折半枚举大法好啊
Load Balancing 给出每个学生的学分. 将学生按学分分成四组,使得sigma (sumi-n/4)最小. 算法: 折半枚举 #include <iostrea ...
随机推荐
- python 培训之HTTP
1. urllib #!/usr/env/python # -*- coding:UTF-8 -*- from __future__ import print_function import sys ...
- auto dock
http://mgltools.scripps.edu/ http://mgltools.scripps.edu/downloads/previous-releases/mgltools-1-5.4/ ...
- Random类
Random类是随机数产生类,可以指定一个随机数的范围,然后任意产生在此范围中的数字. //================================================= // F ...
- JavaScript学习笔记——变量和数据类型
一.javascript命名规范 1. 严格区分大小写 2. 变量的命名必须以字母或 _或 $开头,余下的部分可以是任意的字母,数字,或者是 _或者是$ 3.不能用关键字或者是保留字命名. 4.jav ...
- (转)Java API设计清单
转自: 伯乐在线 Java API设计清单 英文原文 TheAmiableAPI 在设计Java API的时候总是有很多不同的规范和考量.与任何复杂的事物一样,这项工作往往就是在考验我们思考的缜密程度 ...
- sublime2的快捷键
1.快速文件转换 与sublime2中搜索文件快捷键一样,ctrl+p ctrl + p //window comm + p //mac 2.在代码中搜索 在所有已加载的文件中查找一个特定的字符串,支 ...
- C/C++宏中#与##的讲解
http://www.cnblogs.com/morewindows/archive/2011/08/18/2144112.html
- MSSQL数据库链接字符串Asynchronous Processing=true不是异步查询吗,怎么是缓存
;Asynchronous Processing=true 不是异步查询吗,怎么是缓存 <!--<add name="default" providerName=&q ...
- Java操作Oracle
public class DBCon { // 数据库驱动对象 public static final String DRIVER = "oracle.jdbc.driver.OracleD ...
- Linux下用于查看系统当前登录用户信息的4种方法
1. 使用w命令查看登录用户正在使用的进程信息 w命令用于显示已经登录系统的用户的名称,以及他们正在做的事.该命令所使用的信息来源于/var/run/utmp文件.w命令输出的信息包括: 用户名称 用 ...