算是模板题,会了面积交这个应该就会了,正常面积交分为覆盖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. node.js发送短信验证码(附带60秒倒计时插件)

    推荐一个简单且功能齐全的发送短信验证码接口1.安装下载后的SDK只包含一个zhenzisms.js文件,直接导入到工程中即可使用.下载 2.用法引入模块 const zhenzismsClient = ...

  2. WebStore 破解

    前提 你需要首先安装该软件,并下载补丁,不过这些已经为你打包好了. WebStore 2020.1 , jetbrains-agent.jar , resources_zh_CN_WebStorm_2 ...

  3. 项目实训 day15-16

    第一天我与灿哲沟通,我弄明白了真正的网络结构且如何运行的,自己记了下网络草图,开始初步用PlotNN绘制 第二天我发现pycore库表达能力不够,于是参考其他用tex写的例子,写了几个方法,最终能生成 ...

  4. 了解windows下的npm

    之前一直使用Ubuntu系统,对于需要的软件.安装包,都可以使用apt或者apt-get进行安装,本人也是用过python,对于python库的安装,也可以通过pip或者conda来实现,那么,在wi ...

  5. react复制文案到剪切板

    这里使用别人写好的插件. 1.安装要用到的插件:copy-to-clipboard: 2.导入: import copy from 'copy-to-clipboard'; 3.使用: copy(co ...

  6. 内存模型和名称空间复习题(c++ prime plus )

    第一题 注意到setgolf()被重载,可以这样使用其第一个版本: golf ann; setgolf(ann, "Ann Birdfree", 24); 上述函数调用提供了存储在 ...

  7. 4组-Beta冲刺-3/5

    一.基本情况 队名:摸鲨鱼小队 组长博客:https://www.cnblogs.com/smallgrape/p/15600609.html github链接:https://github.com/ ...

  8. Jndi结合DynamicDataSource实现多数据源配置

    首先注意本框架是SSM,配置主要在两个地方.第一个是applicationContext.xml,第二个文件是Tomcat下面的context.xml里面 1.context.xml文件配置的代码如下 ...

  9. python音乐分类--knn

    1 #利用knn算法分类音乐,将音乐进行情绪分类 2 #将音乐分为兴奋的(excited), 愤怒的(angry),悲伤的(sorrowful),轻松的(relaxed) 3 4 #可分离因素 5 # ...

  10. Linux 配置nginx 代理tomcat,配置ssl

    我就直接干活不废话: 配置文件nginx, nginx.conf #user nobody;worker_processes 1; #error_log logs/error.log;#error_l ...