luogu3415 祭坛
先二分答案转化成判定问题。
考虑拿一根扫描线从 \(x=0\) 扫到 \(x=n\),每次移动扫描线更新每个位置它上面的点数和下面的点数,这样可以确定在当前的扫描线上哪些位置对于 \(y\) 轴方向是合法的。对于 \(x\) 轴方向合法的点应该处的范围可以直接算出来,树状数组维护。
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n, uu, vv, siz[100005], upp[100005], loo[100005], ans1, ans2, c[100005];
vector<int> vx[100005];
int lb(int x){
return x&-x;
}
void add(int pos, int val){
if(pos==0) c[0]+=val,pos=n+n;
for(int i=pos; i<=n; i+=lb(i)) c[i] += val;
}
int query(int pos){
int re=0;
for(int i=pos; i; i-=lb(i)) re += c[i];
return re+c[0];
}
bool check(int k){
int num=0, l, r;
for(int i=0; i<=n; i++) upp[i] = 0, loo[i] = siz[i], c[i]=0;
for(int i=1; i<=n; i++){
int qwqq=vx[i-1].size();
for(int j=0; j<qwqq; j++){
int t=vx[i-1][j];
bool isok=(upp[t]>=k)&&(loo[t]>=k);
upp[t]++;
if(!isok && upp[t]>=k && loo[t]>=k) add(t, 1);
}
qwqq=vx[i].size();
bool flag=qwqq>=2*k;
if(flag) l=vx[i][k-1]+1, r=vx[i][vx[i].size()-k]-1;
for(int j=0; j<qwqq; j++){
int t=vx[i][j];
bool isok=(upp[t]>=k)&&(loo[t]>=k);
loo[t]--;
if(isok && !(upp[t]>=k && loo[t]>=k)) add(t, -1);
if(isok && flag && t>=l && t<=r) num--;
}
if(!flag || l>r) continue;
num += query(r) - query(l-1);
}
if(!num) return false;
ans1 = k; ans2 = num;
return true;
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
scanf("%d %d", &uu, &vv);
vx[uu].push_back(vv);
siz[vv]++;
}
for(int i=0; i<=n; i++) sort(vx[i].begin(), vx[i].end());
int l=0, r=n, mid;
while(l<=r){
mid = (l + r) >> 1;
if(check(mid)) l = mid + 1;
else r = mid - 1;
}
cout<<ans1<<endl<<ans2<<endl;
return 0;
}
luogu3415 祭坛的更多相关文章
- BZOJ2934 : [Poi1999]祭坛问题
对于每个祭坛,算出每条线段阻碍它的角度区间,然后排序求并看看是否有空位即可,时间复杂度$O(n^2\log n)$. 这题在Main上官方时限是0.2S,因此需要几个常数优化: $1.$为了避免用at ...
- luoguP3415 祭坛
https://www.luogu.org/problemnew/show/P3415 考虑二分结界层数,将 n 个点按 x 大小依次加入答案,一行一行的做,用树状数组维护当前这一行中[0, x - ...
- luogu 3415 祭坛
题目大意: 在平面上,有 n 个水晶柱,每个水晶柱可以用一个点表示 如果 4 个水晶柱依次相连可以构成一个四边形,满足其两条对角线分别平行于 x 轴和 y 轴,并且对角线的交点位于四边形内部(不包括边 ...
- Introduction to neural network —— 该“神经网络” 下拉“祭坛”
Introduction to neural network 不能自欺欺人. 实干兴邦,空谈误国. -------------------------------------------------- ...
- 手机wifi密码的保存位置
subjects: adj. 受制于...的, 被统治的; n. 主题,学科, 国民 the subjects had to kneel down before the king. kneel -& ...
- 3563: DZY Loves Chinese - BZOJ
Description神校XJ之学霸兮,Dzy皇考曰JC.摄提贞于孟陬兮,惟庚寅Dzy以降.纷Dzy既有此内美兮,又重之以修能.遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上有N座祭 ...
- BZOJ 3569 DZY Loves Chinese II
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...
- BZOJ 3563 DZY Loves Chinese
Description 神校XJ之学霸兮,Dzy皇考曰JC. 摄提贞于孟陬兮,惟庚寅Dzy以降. 纷Dzy既有此内美兮,又重之以修能. 遂降临于OI界,欲以神力而凌♂辱众生. 今Dzy有一魞歄图,其上 ...
- html.ex.day02
1.同一个目录内页面跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...
随机推荐
- Mike and gcd problem CodeForces - 798C
题目 (智商题 or 糟心的贪心) 题意: 有一个数列a1,a2,...,an,每次操作可以将相邻的两个数x,y变为x-y,x+y,求最少的操作数使得gcd(a1,a2,...,an)>1.gc ...
- 正则表达式exec方法的陷阱
http://www.w3school.com.cn/jsref/jsref_exec_regexp.asp exec() 方法的功能非常强大,它是一个通用的方法,而且使用起来也比 test() 方法 ...
- 简单记录下@RequestBody(关于它和@RequestParam接收数据方式的拓展)
内容参考自博客:https://blog.csdn.net/ff906317011/article/details/78552426 这个标注是用来注释controller中的请求方法中的参数的,那么 ...
- qt read excel
void exceladapter::readfile(QString filename, QString sheetname, int colNo){ QSqlDatabase db = QSqlD ...
- git push时报错filename too long的解决
命令行输入:git config core.longpaths true 之后再进行 git 的push命令
- 正确使用MySQL JDBC setFetchSize()方法解决JDBC处理大结果
一直很纠结,Oracle的快速返回机制,虽然结果集很多,可是它能很快的显示第一个结果,虽然通过MYSQl的客户端可以做到,但是通过JDBC却不行. 今天用了1个多小时,终于搞定此问题,希望对广大Jav ...
- javascript动态添加、修改、删除对象的属性与方法
在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为, ...
- Oracle AWR报告的生成
生成AWR报告需要dbms_workload_repository包的权限. 一.以oracle用户登录到数据库服务器 二.进入SQLPLUS 三.执行脚本 @?/rdbms/admin/awrrpt ...
- LibreOJ #119. 最短路 (堆优化dijkstra)
题目描述 给一个 n(1≤2500≤n) n(1 \leq 2500 \leq n)n(1≤2500≤n) 个点 m(1≤6200≤m) m(1 \leq 6200 \leq m)m(1≤6200≤m ...
- [Python學習筆記] 在Centos上安裝 Django
曾在模擬器跟Digital Ocean上安裝成功,我在 Digital Ocean上的是CentOS 7 x64,模擬器的則是Centos 6.雖然Centos 本身已經裝好 Python 但是是2. ...