矩形面积k次交 UVA - 11983
算是模板题,会了面积交这个应该就会了,正常面积交分为覆盖1次以上,两次以上,这个就分为覆盖1到k次以上就行了。
这个题有点边界问题:是让你求覆盖的点,所以你可以假设一个1*1的正方向表示它的左下角被覆盖,那你读入x2,y2时就让x2++,y2++。这样直接算面积就处理好边界了。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#define ll long long
#define rep(i, a, b) for(int i = a; i <= b; i++)
#define ls num*2
#define rs num*2+1
using namespace std; const int maxn = 3e5 + 1010;
int k;
ll loc[maxn*2];
struct seg{
ll l, r, h;
int flag;
bool operator < (const seg &a)const{
return h < a.h;
}
}line[maxn*2]; struct node{
ll l, r, sum;
ll len[12]; }p[maxn*4]; void build(int num, int l, int r){
p[num] = (node){l, r, 0, 0};
if(l == r) return;
int mid = (l+r)/2;
build(ls, l, mid);
build(rs, mid+1, r);
} void pushup(int num){
ll int x = p[num].sum;
ll l = p[num].l, r = p[num].r;
if(p[num].sum){
for(int i = 1; i <= k; i++){
if(p[num].sum >= i) p[num].len[i] = loc[r+1] - loc[l];
else if(l == r) p[num].len[i] = 0;
else p[num].len[i] = p[ls].len[i-x] + p[rs].len[i-x];
}
}
else{
for(int i = 1; i <= k; i++){
if(l == r) p[num].len[i] = 0;
else p[num].len[i] = p[ls].len[i] + p[rs].len[i];
}
}
} void change(int num, ll ul, ll ur, int x){
ll l = p[num].l, r = p[num].r;
if(loc[r+1] <= ul || loc[l] >= ur) return;
if(loc[r+1] <= ur && loc[l] >= ul){
p[num].sum += x;
pushup(num);
return;
}
change(ls, ul, ur, x);
change(rs, ul, ur, x);
pushup(num);
} int main(){
ll x1, x2, y1, y2, n, pos;
int cas = 0;
int t; scanf("%d",&t);
while(t--){
pos = 0;
scanf("%lld %d",&n,&k);
rep(i, 1, n){
scanf("%lld%lld%lld%lld",&x1, &y1, &x2, &y2);
x2++, y2++;
loc[++pos] = x1;
line[pos] = (seg){x1, x2, y1, 1};
loc[++pos] = x2;
line[pos] = (seg){x1, x2, y2, -1};
}
n *= 2;
sort(line+1, line+1+n);
sort(loc+1, loc+1+n);
int num = unique(loc+1, loc+1+n) - loc - 1;
build(1, 1, num-1);
ll ans = 0;
rep(i, 1, n-1){
change(1, line[i].l, line[i].r, line[i].flag);
ans += p[1].len[k] * (line[i+1].h - line[i].h);
}
printf("Case %d: %lld\n",++cas, ans);
}
return 0;
}
矩形面积k次交 UVA - 11983的更多相关文章
- UVA 11983 Weird Advertisement(线段树求矩形并的面积)
UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...
- UVA 11983 Weird Advertisement --线段树求矩形问题
题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...
- UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]
题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...
- hdu1255 覆盖的面积 线段树+里离散化求矩形面积的交
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 求矩形面积的交的线段树题目,刚做了求并的题目,再做这个刚觉良好啊,只要再加一个表示覆盖次数大于1 ...
- 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)
B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K 腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...
- HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)
链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...
- Java实现 蓝桥杯VIP基础练习 矩形面积交
描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩 ...
- 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交
E - 秋实大哥与家 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...
- 【hdu1255】线段树求矩形面积交
题意大概就是上图这个样子.<=100组测试数据,每组<=1000个矩形. 题解: 这个问题怎么解决..做了上一题矩形面积并应该就会了.. 对于每个节点维护3个值: cnt:该节点所代表的这 ...
- POJ 1151 Atlantis(线段树-扫描线,矩形面积并)
题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...
随机推荐
- 【2020NOI.AC省选模拟#2】A. 旋转
题目链接 原题解: 把每个点的坐标视为复数,那么每次询问就是区间求平均数(先求和然后除以个数).一个点绕着原点旋转就是乘以$(\cos 60^\circ +i\sin 60^\circ)$. 一个点绕 ...
- Java基础学习:2、Java数据类型及逻辑运算符
1.数据类型: 数据类型范围: byte:-2^7 ~ 2^7-1,即-128 ~ 127.1字节.Byte.末尾加B short:-2^15 ~ 2^15-1,即-32768 ~ 32767.2字节 ...
- 策略模式demo
/** StrategyContext. */ public class StrategyContext { private Strategy strategy; // 传入的是Strategy的实现 ...
- CH32F103C8T6的USB开发(一)
一.背景 项目用到单片机采集模拟量数据,原先使用USB转串口,速度嫌慢,还要转串口芯片,电脑还要安装驱动,现更改为采用USB的HID类来传输. 二.单片机选型 STM32F103的USB接口简单易用, ...
- CSR生成证书与签发证书
openSSL生成证书 生成根证书 // Generate CA private key openssl genrsa -out ca.key 2048 // Generate CSR openssl ...
- mysqld 打开连接卡
把client的ip写在mysql服务器的/etc/hosts文件里 echo [ip] [hostname] >>/etc/hosts
- md5加密js内容
避免以后都得百度,直接留一份存档 /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Diges ...
- hbuliter x 连接雷电模拟器
adb 路径 E:\HBuilderX\plugins\launcher\tools\adbs 也可以配置环境变量 配置环境变量:将adb.exe所在路径,放在Path中计算机(右键)→属性→高级系 ...
- 利用python-pptx包批量修改ppt格式
最近实习需要对若干ppt进行格式上的调整,主要就是将标题的位置.对齐方式.字体等统一,人工修改又麻烦又容易错. 因此结合网上的pptx包资料,使用python脚本完成处理. 主要的坑点在于,shape ...
- Verilog教程
1. 简介 当用 Verilog 设计完成数字模块后进行仿真时,需要在外部添加激励,激励文件叫 testbench. Verilog 的主要特性: 可采用 3 种不同的方式进行设计建模:行为级描述-- ...