算是模板题,会了面积交这个应该就会了,正常面积交分为覆盖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的更多相关文章

  1. UVA 11983 Weird Advertisement(线段树求矩形并的面积)

    UVA 11983 题目大意是说给你N个矩形,让你求被覆盖k次以上的点的总个数(x,y<1e9) 首先这个题有一个转化,吧每个矩形的x2,y2+1这样就转化为了求N个矩形被覆盖k次以上的区域的面 ...

  2. UVA 11983 Weird Advertisement --线段树求矩形问题

    题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...

  3. UVA-11983-Weird Advertisement(线段树+扫描线)[求矩形覆盖K次以上的面积]

    题意: 求矩形覆盖K次以上的面积 分析: k很小,可以开K颗线段树,用sum[rt][i]来保存覆盖i次的区间和,K次以上全算K次 // File Name: 11983.cpp // Author: ...

  4. hdu1255 覆盖的面积 线段树+里离散化求矩形面积的交

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 求矩形面积的交的线段树题目,刚做了求并的题目,再做这个刚觉良好啊,只要再加一个表示覆盖次数大于1 ...

  5. 2019计蒜之道初赛4 B. 腾讯益智小游戏—矩形面积交(简单)(矩形交集)

    B. 腾讯益智小游戏—矩形面积交(简单) 1000ms 262144K   腾讯游戏开发了一款全新的编程类益智小游戏,最新推出的一个小游戏题目是关于矩形面积交的.聪明的你能解出来吗?看下面的题目接招吧 ...

  6. HDU - 1255 覆盖的面积(线段树求矩形面积交 扫描线+离散化)

    链接:线段树求矩形面积并 扫描线+离散化 1.给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. 2.看完线段树求矩形面积并 的方法后,再看这题,求的是矩形面积交,类同. 求面积时,用被覆 ...

  7. Java实现 蓝桥杯VIP基础练习 矩形面积交

    描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩 ...

  8. 2015 UESTC 数据结构专题E题 秋实大哥与家 线段树扫描线求矩形面积交

    E - 秋实大哥与家 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 De ...

  9. 【hdu1255】线段树求矩形面积交

    题意大概就是上图这个样子.<=100组测试数据,每组<=1000个矩形. 题解: 这个问题怎么解决..做了上一题矩形面积并应该就会了.. 对于每个节点维护3个值: cnt:该节点所代表的这 ...

  10. POJ 1151 Atlantis(线段树-扫描线,矩形面积并)

    题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...

随机推荐

  1. ngnix开启高可用网关集群--好记性不如烂笔头

    #1.开启高可用网关集群--------------------好记性不如烂笔头--------------------------- #gzip on; #开启网关集群 upstream gatew ...

  2. python菜鸟学习: 10. 函数的基本用法

    # -*- coding: utf-8 -*-# 回参函数def test01(): return 0# 以元组返回参数def test02(): return 1, [1, 2, 3, 4, 5], ...

  3. Excel Vlookup用法和常见报错#REF! #Value!

    VLOOKUP(E2,$A$2:$C$5,2,FALSE) E2 为选中查找的条件 $A$2:$C$5 1为需要查找的区域,这个区域一般是固定的,所以要加上$符号 2这个区域可以在前面加上SHEET2 ...

  4. mysql的日期输出格式列出来

    mysql的日期输出格式列出来: %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小 ...

  5. 第三章:用python实现常用的用户分层模型(RFM模型)

    文章目录 项目背景 读取数据 数据分析 分析 Recent 分析 Frequency 分析 Mount RFM模型 分位数分层 自定义分层 定义客户标签 数据可视化 结论 源码地址 本文可以学习到以下 ...

  6. 蓝桥2020 B组 第一场考试

    2. 纪念日 问题描述: 请问从 1921 年 7 月 23 日中午 12 时到 2020 年 7 月 1 日中午 12 时一共包 含多少分钟? 答案提交: 这是一道结果填空题,你只需要算出结果后提交 ...

  7. Merge Overlapping Intervals

    refer to: https://www.algoexpert.io/questions/Merge%20Overlapping%20Intervals Problem Statement Samp ...

  8. 理解 Shell

    理解 Shell shell 的父子关系 用于登录的某个虚拟控制器终端,或在 GUI 中运行终端仿真器时所启动的默认的交互 shell,是一个父 shell.本书到目前为止都是父 shell 提供 C ...

  9. Linux系列---【内存占用过高问题排查思路】

    内存占用过高问题排查思路 1.使用top命令查看后台任务 按shift+M使应用按内存使用率排序,定位到第一个使用内存最高的应用,并找到对应的PID. 2.使用ps命令查看对应的pid对应哪个应用 p ...

  10. Java mysql批量关联插入数据

    mysql 关联批量插入数据 INSERT INTO 表1 ( id, name, addTime ) SELECT UUID( ) AS id, v_Name, now( ) FROM 表2;