3356: [Usaco2004 Jan]禁闭围栏

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 45  Solved: 26
[Submit][Status][Discuss]

Description

    贝茜又做犯事了,约翰打算关她禁闭.他的农场建有N(1≤N≤250000)个矩形篱笆.围栏不重叠也互不接触,但足一个围栏可能包含一个或几个其他的围栏.他知道贝茜擅长逃脱,所以希望把她放在一个被围的层数最多的围栏里.请为他找出这样的围栏,并求出有多少个这样的围栏

Input

    第1行:一个整数N.
    第2到N+1行:每行四个整数X1,Y1,X2,Y2,表示围栏的左下角和右上角.X,y∈[1..10^9],
且X1<X2,Y1< Y2

Output

    两个整数:最大层数和几个这样的围栏.

Sample Input

4
1 1 16 16
6 6 11 13
7 7 9 12
3 3 10 5

Sample Output

3 1

先将y坐标离散化,然后从左往右扫描,每遇到一条正方形的边就更新树状数组

正方形处理如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct Line
{int x, l, r, id, t;bool operator < (const Line &b) const{if(x<b.x)return 1;return 0;}
}Line;
Line s[500005];
int cnt, p[500005], tre[500005], sum[500005];
int Query(int k)
{int ans = 0;while(k){ans += tre[k];k -= k&-k;}return ans;
}
void Update(int k, int x)
{while(k<=cnt){tre[k] += x;k += k&-k;}
}
int main(void)
{int x1, y1, x2, y2, n, i, bet, ans;scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d%d%d%d", &x1, &y1, &x2, &y2);p[++cnt] = y1, s[cnt].id = i, s[cnt].t = 1, s[cnt].l = y1, s[cnt].r = y2, s[cnt].x = x1;p[++cnt] = y2, s[cnt].id = i, s[cnt].t = -1, s[cnt].l = y1, s[cnt].r = y2, s[cnt].x = x2;}sort(p+1, p+cnt+1);cnt = unique(p+1, p+cnt+1)-(p+1);n *= 2;sort(s+1, s+n+1);for(i=1;i<=n;i++){s[i].l = lower_bound(p+1, p+cnt+1, s[i].l)-p;s[i].r = lower_bound(p+1, p+cnt+1, s[i].r)-p;}for(i=1;i<=n;i++){if(s[i].t==1)sum[s[i].id] = Query(s[i].l)+1;Update(s[i].l, s[i].t);Update(s[i].r, -s[i].t);}n /= 2;ans = 0, bet = 0;for(i=1;i<=n;i++){if(sum[i]==bet)ans++;else if(sum[i]>bet)bet = sum[i], ans = 1;}printf("%d %d\n", bet, ans);return 0;
}

bzoj 3356: [Usaco2004 Jan]禁闭围栏(扫描线+树状数组)相关推荐

  1. bzoj 3356: [Usaco2004 Jan]禁闭围栏 离散化+树状数组

    新博客链接:https://www.everlasting.wang/archives/228

  2. BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化)

    BZOJ - 2244 拦截导弹 (dp,CDQ分治+树状数组优化) 1 #include<algorithm> 2 #include<iostream> 3 #include ...

  3. BZOJ3356 : [Usaco2004 Jan]禁闭围栏

    首先将坐标离散化,考虑从左往右扫描线 碰到插入操作则插入 碰到删除操作的: 当前包含i的矩形数=y1在[1,y2[i]]之间的矩形数-y2在[1,y1[i]-1]之间的矩形数 用两棵树状数组维护即可, ...

  4. BZOJ 3289 Mato的文件管理 | 莫队 树状数组

    BZOJ 3289 Mato的文件管理 题意 求区间逆序对. 题解 在莫队的基础上使用树状数组求逆序对. 在当前区间左侧加入一个数时,res += 原区间比它小的数的个数: 在当前区间右侧加入一个数时 ...

  5. hdu 6681 2019 杭电多校九1002 Rikka with Cake(扫描线+树状数组)

    题意:给一个矩形,在矩形内部有很多射线,这些射线的起点不会碰到矩形边界,问这些射线把矩形分成了几部分 题解:分成的区域数等于线段交点数加一,推导还是看jls的题解把 单说求交点个数的问题,我的方法就是 ...

  6. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 1539  Solved: 665 [Submit][Status][ ...

  7. bzoj 2131: 免费的馅饼【dp+树状数组】

    简单粗暴的dp应该是把馅饼按时间排序然后设f[i]为i接到馅饼能获得的最大代价,转移是f[i]=max(f[j])+v[i],t[j]<=t[i],2t[i]-2t[j]>=abs(p[i ...

  8. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2221  Solved: 1179 [Submit][S ...

  9. bzoj 4765: 普通计算姬(分块+树状数组)

    4765: 普通计算姬 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 1481  Solved: 318 [Submit][Status][Disc ...

最新文章

  1. 一起来看看Babel到底执行了什么?
  2. Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系
  3. UITextView实现图文混排效果
  4. 手机知识:90Hz或120Hz屏幕刷新率有啥区别,看完你就懂了!
  5. Python 绘制散点图
  6. 使用for循环遍历文件、使用while循环遍历文件
  7. Failed to start Zabbix Agent.
  8. Mifare Classic Tool(MCT)汉化版
  9. 限流算法: 漏桶算法和令牌桶算法
  10. 银川JW万豪酒店与银川万怡酒店双品牌酒店启幕
  11. 业务分析报告与数据可视化报表
  12. 日暮途远,故吾倒行而逆施之.
  13. java中是什么意思_java中@什么意思
  14. Linux/ Unix 键盘检测程序
  15. 大一微积分笔记整理_大一微积分知识点总结
  16. 米的换算单位和公式_米的单位换算公式大全(长度单位大全表)
  17. 在电脑上怎么做判断题打√或x_苹果Mac电脑知识竞赛考试题
  18. BioPython读取FASTA文件保留header中空格的方法
  19. uni-app心得体会
  20. EWC:Overcoming catastrophic forgetting in neural networks论文笔记

热门文章

  1. python教程视频哪个好-Python入门视频哪个好?
  2. 盘点语音识别技术在人工智能中的应用
  3. 语音情感识别的优选方法与流程
  4. 前端链接共享(记录)
  5. 计算机域名DNS设置,电脑的IP地址和DNS域名服务器如何设置
  6. SpringBoot 实现登录验证码(附集成SpringSecurity)
  7. 前端面试知识点归纳:vue,react,webpack,bable,项目开发
  8. 【java笔记】常用函数式接口(1):Supplier接口
  9. int java 时间,java 时间处理类
  10. 浏览器管理oracle网址,浏览器用户界面 (Browser User Interface, BUI)