UVA 11983 Weird Advertisement
UVA_11983
这个题目可以转化成求被覆盖K次的矩形面积的并,只要将x2和y2都+1即可,相当于我们把每个单位正方形看成一个点。
#include<stdio.h> #include<string.h> #include<stdlib.h> #define MAXK 11 #define MAXD 60010 int N, K, M, len[4 * MAXD][MAXK], cnt[4 * MAXD], ty[MAXD]; struct Seg {int x, y1, y2, col; }seg[MAXD]; int cmpint(const void *_p, const void *_q) {int *p = (int *)_p, *q = (int *)_q;return *p < *q ? -1 : 1; } int cmps(const void *_p, const void *_q) {Seg *p = (Seg *)_p, *q = (Seg *)_q;return p->x < q->x ? -1 : 1; } void build(int cur, int x, int y) {int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1;memset(len[cur], 0, sizeof(len[cur]));len[cur][0] = ty[y + 1] - ty[x];cnt[cur] = 0;if(x == y)return ;build(ls, x, mid);build(rs, mid + 1, y); } void init() {int i, j, k, x1, y1, x2, y2;scanf("%d%d", &N, &K);for(i = 0; i < N; i ++){j = i << 1, k = (i << 1) | 1;scanf("%d%d%d%d", &x1, &y1, &x2, &y2);++ x2, ++ y2;seg[j].x = x1, seg[k].x = x2;seg[j].y1 = seg[k].y1 = y1, seg[j].y2 = seg[k].y2 = y2;seg[j].col = 1, seg[k].col = -1;ty[j] = y1, ty[k] = y2;}qsort(ty, N << 1, sizeof(ty[0]), cmpint);M = -1;for(i = 0; i < (N << 1); i ++)if(i == 0 || ty[i] != ty[i - 1])ty[++ M] = ty[i];build(1, 0, M - 1); } int BS(int x) {int mid, min = 0, max = M + 1;for(;;){mid = (min + max) >> 1;if(mid == min)break;if(ty[mid] <= x)min = mid;elsemax = mid;}return mid; } void update(int cur, int x, int y) {int ls = cur << 1, rs = (cur << 1) | 1;memset(len[cur], 0, sizeof(len[cur]));if(cnt[cur] >= K)len[cur][K] = ty[y + 1] - ty[x];else if(x == y)len[cur][cnt[cur]] = ty[y + 1] - ty[x];else{int i;for(i = cnt[cur]; i <= K; i ++)len[cur][i] += len[ls][i - cnt[cur]] + len[rs][i - cnt[cur]];for(i = K - cnt[cur] + 1; i <= K; i ++)len[cur][K] += len[ls][i] + len[rs][i];} } void refresh(int cur, int x, int y, int s, int t, int c) {int mid = (x + y) >> 1, ls = cur << 1, rs = (cur << 1) | 1;if(x >= s && y <= t){cnt[cur] += c;update(cur, x, y);return ;}if(mid >= s)refresh(ls, x, mid, s, t, c);if(mid + 1 <= t)refresh(rs, mid + 1, y, s, t, c);update(cur, x, y); } void solve() {int i, j, k;long long int ans = 0;qsort(seg, N << 1, sizeof(seg[0]), cmps);seg[N << 1].x = seg[(N << 1) - 1].x;for(i = 0; i < (N << 1); i ++){j = BS(seg[i].y1), k = BS(seg[i].y2);refresh(1, 0, M - 1, j, k - 1, seg[i].col);ans += (long long int)len[1][K] * (seg[i + 1].x - seg[i].x);}printf("%lld\n", ans); } int main() {int t, tt;scanf("%d", &t);for(tt = 0; tt < t; tt ++){init();printf("Case %d: ", tt + 1);solve();}return 0; }
UVA 11983 Weird Advertisement相关推荐
- 数据结构---线段树
线段树 转载请注明出处,谢谢!http://blog.csdn.net/metalseed/article/details/8039326 持续更新中··· 一:线段树基本概念 1:概述 线段树 ...
- 【转】线段树题目 汇总 讲解(by not only success)
转载自:http://www.notonlysuccess.com/ 非常喜欢他的代码风格以及简洁的思路,感谢notonlysuccess! PS:他的个人网站好像是上不去了-.- 线段树 很早前写的 ...
- ACM大牛总结的线段树专辑
https://blog.csdn.net/qq_25605637/article/details/46967529 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章 ...
- 【转载】完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...
- 转载自杭电大牛的博客 线段树 绝对经典
转载自:http://www.notonlysuccess.com/ 不可不看的经典 学线段树必看,大牛很多,给后人留下记录的却没有几个,谢谢这位大牛~! 因为我这最近他博客打不开了...特意从别人那 ...
- 线段树模板(来自胡浩大牛)
http://www.notonlysuccess.com/(今天看二叉树,想回来看看,发现大牛博客进不去...) 如果要学,就要好好学.我copy的,如有错,请看http://www.cnblogs ...
- 【线段树】线段树及其相关 复习
划分树: poj2104 K-th number /*******************************\* @prob: poj2104 K-th number ** @auth: Wan ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
- 大牛整理的线段树集锦
转载自:http://www.notonlysuccess.com/ 膜拜之... [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pk ...
最新文章
- 自学python需要多长时间-Python学习步骤如何安排?多长时间可以学会精通呢?
- ajax脚本格式,jQuery ajax调用 - jim脚本响应是什么格式?
- 深拷贝与浅拷贝、值语义与引用语义对象语义 ——以C++和Python为例
- Matrix(二维树状数组)入门第一题
- 小米商城html_北京市发放新一批 170 万个消费券:京东、小米商城等平台可领
- matlab 遗传算法 等式约束,关于MATLAB遗传算法工具箱不等式约束
- 初窥JQuery-Jquery简介
- win7 C盘空间越来越小 Windows文件夹变大的问题
- 从数组中取值,并且比较字符串的值
- 《私募证券投资基金业绩报酬指引(征求意见稿)》
- PC傻瓜式安装黑苹果并打造成全能逆向工作站--更新至2021.12.20
- 关于web3营销的一切知识
- 药店app的布局html,APP首页常用排版
- word尾注编辑参考文献
- Dynamic Label Assignment for Object Detection by Combining Predicted and Anchor IoUs
- 第一次尝试公司项目上线
- 开篇 :直播软件分析.
- Eureka的自我保护机制与如何禁用
- Python+Excel:批量重命名多个工作簿
- arcgis 圈选获取图层下点位_关于Arcgis这62个常用技巧,你造吗
热门文章
- 未来一年最有可能成为独角兽的29家美国初创公司
- 传感器数据完善 AI 功能,激起机器人“网络效应”
- Google正式发布TensorFlow Lite预览版,针对移动/嵌入设备的轻量级解决方案
- 2021 年度热门技术书单提前公开,这些好书藏不住了
- 你要偷偷学会排查线上 CPU 飙高的问题,然后惊艳所有人!
- 被马斯克送上天的《银河帝国》和互联网江湖 | 赠书
- 把人脑智能化后,能再创造出更强的人工智能吗?
- 【Fiddler学习】Fiddler抓包HTTPS请求和手机抓包
- ftp部署一个可供centos6、centos7系统使用的yum网络仓库
- MySQL分库分表使用Snowflake全局ID生成器(3rd)