Mayor's posters POJ
来源:互联网 发布:红帽linux查看防火墙 编辑:程序博客网 时间:2024/05/18 13:09
链接:http://poj.org/problem?id=2528
题意:在一个长度不超过10000000的区间内贴海报,因为贴的过程中会有覆盖的问题, 假如第一次贴[1, 4], 第二次贴[2, 6],就会覆盖住[2, 4]部分,问贴完所有海报后能看到多少张海报。
解题思路:因为数据量太大,故要对所给出的数据先进行离散化比如(1, 2, 5, 6, 8, 10),离散化以后为(1, 2, 3, 4, 5, 6), 然后考虑到覆盖问题,为了实现方便我选择从最后一张海报往前贴,问题转化为区间是否已经被占有,对于贴区间又可以转化为对于点的操作,即对于区间[1, 4]之间的线段可以转化为点[1, 3]。(写代码的时候没有考虑太多,而且题目很水)
ps:离散中有需要注意的点:假如第一次贴[1, 7], 第二次贴[1, 3], [5, 7], 正常离散的方法就会错(题目太水,而且好像正确做法会wa)
贴一个ac的代码(实际上是错的)
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define LL long long#define lson ins<<1#define rson ins<<1|1#define merge tree[ins]=tree[lson]+tree[rson]#define mid (r+l)/2using namespace std;const int Max = 200052;int Hash[Max], ans;struct node{ int x, y;}data[Max>>1];struct Tree { int l, r; LL sum, lazy;} tree[Max << 2];inline void build(int l, int r, int ins) { tree[ins].l = l, tree[ins].r = r, tree[ins].sum = tree[ins].lazy = 0; if (r > l) { build(l, mid, lson); build(mid + 1, r, rson); }}inline int updata_tree(int ql, int qr, int ins) { int l = tree[ins].l, r = tree[ins].r; if (ql <= l && r <= qr){ if(tree[ins].sum==0){ tree[ins].sum=1; return 1; } return 0; } else if(!tree[ins].sum){ int flag=0; if (ql <= mid)if(updata_tree(ql, qr, lson))flag=1; if (qr > mid)if(updata_tree(ql, qr, rson))flag=1; if(tree[lson].sum&&tree[rson].sum)tree[ins].sum=1; return flag; } return 0;}int main() { int T; scanf("%d", &T); while(T--){ ans=0; int n, mem=1; scanf("%d", &n); for(int a=1; a<=n; a++){ scanf("%d%d", &data[a].x, &data[a].y); Hash[mem++]=data[a].x; Hash[mem++]=data[a].y-1; } sort(Hash+1, Hash+mem); mem=unique(Hash+1, Hash+mem)-(Hash+1); build(1, mem, 1); for(int a=n; a>=1; a--){ int l=lower_bound(Hash+1, Hash+mem+1, data[a].x)-Hash; int r=lower_bound(Hash+1, Hash+mem+1, data[a].y)-Hash; ans+=updata_tree(l, r-1, 1); } printf("%d\n", ans); } return 0;}/*131 71 35 72 */
阅读全文
0 0
- Mayor's posters POJ
- Mayor's posters POJ
- Mayor's posters POJ
- POJ 2528 Mayor's posters
- poj 2528 Mayor's posters
- POJ 2528 Mayor's Posters
- Mayor's posters poj 2528
- poj 2528 Mayor's posters
- Poj 2528 Mayor's posters
- poj 2528 Mayor's posters
- POJ 2528 Mayor's posters
- POJ 2528 Mayor's posters
- POJ 2528 - Mayor's posters
- POJ-2528-Mayor's posters
- poj 2528 Mayor's posters
- poj 2528 Mayor's posters
- poj 2528 Mayor's posters
- POJ 2528 Mayor's posters
- arm linux kernel 从入口到start_kernel 的代码分析
- 多态中的成员访问特点
- PHP之chr()和ord()方法
- 关于在项目中引入了第三方库而发生的Multiple dex files define错误的解决
- Android手机短信验证--Bmob短信验证
- Mayor's posters POJ
- ansible之playbook入门
- 【C++】【LeetCode】139. Word Break
- 4个理由告诉你Java为何排行第一
- linux实验楼学习笔记8
- 第六篇:JAVA集合之TreeMap源码剖析
- Android Framework中的Application Framework层介绍
- fluentd分布式日志管理系统
- STL容器