博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
luoguP3415 祭坛
阅读量:6097 次
发布时间:2019-06-20

本文共 1837 字,大约阅读时间需要 6 分钟。

考虑二分结界层数,将 n 个点按 x 大小依次加入答案,一行一行的做,用树状数组维护当前这一行中[0, x - 1] 包含祭坛大于 mid 的且 [x + 1, n] 中包含的祭坛也大于 mid 的坐标,再计算出这一行有几个地方可以作为中心,简单容斥(可能还不算容斥?)一下就可以了

有一个坑就是当节点层数是 0 的时候输出两行 0

#include 
using namespace std;const int N = 1e5 + 5;struct ele { int x, y; bool operator < (const ele A) const {return x < A.x || (x == A.x && y < A.y);}}d[N];int sum[N], f[N], y[N], allsum[N];int n, len;inline int lowbit(int x) {return x & -x;}inline void add(int x, int y) {for(int i = x; i <= n; i += lowbit(i)) f[i] += y;}inline int query(int x) {int ans = 0; for(int i = x; i; i -= lowbit(i)) ans += f[i]; return ans;}int solve(int mid) { memset(sum, 0, sizeof(sum)); memset(f, 0, sizeof(f)); int now = 1, ans = 0; for(int i = 0; i <= n; i++) { len = 0; while(now <= n && d[now].x == i) { int t = d[now++].y; y[++len] = t; } if(len >= (mid << 1)) { int l = y[mid] + 1, r = y[len - mid + 1] - 1; for(int j = mid + 1; j <= len - mid; j++) ans -= (sum[y[j]] >= mid && (allsum[y[j]] - sum[y[j]] >= mid)); ans += (query(r) - query(l - 1)); } for(int j = 1; j <= len; j++) { int t = y[j]; if(sum[t] >= mid && (allsum[t] - sum[t] == mid)) add(t, -1); sum[t]++; if(sum[t] == mid && (allsum[t] - sum[t] >= mid)) add(t, 1); } } return ans;}int main() { cin >> n; for(int i = 1; i <= n; i++) scanf("%d %d", &d[i].x, &d[i].y); sort(d + 1, d + n + 1); for(int i = 1; i <= n; i++) allsum[d[i].y]++; int l = 1, r = n / 4; while(l < r) { int mid = (l + r + 1) >> 1; if(solve(mid)) l = mid; else r = mid - 1; } if(solve(l) == 0) printf("0\n0\n"); else printf("%d\n%d\n", l, solve(l)); return 0;}

转载于:https://www.cnblogs.com/LJC00118/p/9656893.html

你可能感兴趣的文章
About Me
查看>>
BZOJ4756:[USACO]Promotion Counting(线段树合并)
查看>>
内部类、代码块
查看>>
软件工程第二章 习题2 第5题
查看>>
残缺的字符串【FFT】
查看>>
ZZULIOJ 1917: E
查看>>
南阳oj 题目2—括号配对问题
查看>>
C/C++的const区别
查看>>
定位Java运行时 代码段方法
查看>>
Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案...
查看>>
python第三方库汇总
查看>>
matplotlib可视化_常用图
查看>>
TypeScript 额外的属性检测
查看>>
构建自己的GAFATA
查看>>
视频地址blog加密
查看>>
iOS 开发使用 Jenkins 搭建 CI 服务器
查看>>
Linux内核-内存回收逻辑和算法(LRU)
查看>>
Spring Cloud微服务分布式云架构-集成项目简介
查看>>
MXCornerRadius 只需1行代码让你的UIImageView 有任意的cornerRadius圆角!
查看>>
iOS获取m3u8流媒体的视频截图
查看>>