pku3277 City Horizon
http://poj.org/problem?id=3277
线段树,离散化,成段更新
#include <stdio.h>
#include <stdlib.h> #define lson l, m, root<<1
#define rson m+1, r, root<<1|1 const long long N = ;
const long long inf = (<<)-; long long max1[N<<], color[N<<]; long long max(long long x, long long y)
{
return x>y? x: y;
} void push_up(long long root)
{
max1[root] = max(max1[root<<], max1[root<<|]);
} void push_down(long long l, long long r, long long root)
{
color[root<<] = max(color[root<<], color[root]);
color[root<<|] = max(color[root<<|], color[root]);
color[root] = -;
max1[root<<] = max(max1[root<<], color[root<<]);
max1[root<<|] = max(max1[root<<|], color[root<<|]);
} void build(long long l, long long r, long long root)
{
long long m;
color[root] = -;
if(l == r)
{
max1[root] = ;
return;
}
m = (l + r) >> ;
build(lson);
build(rson);
push_up(root);
} void update(long long L, long long R, long long x, long long l, long long r, long long root)
{
long long m;
if(L <= l && r <= R)
{
color[root] = max(color[root], x);
max1[root] = max(max1[root], color[root]);
return;
}
m = (l + r) >> ;
if(color[root] != -)
{
push_down(l, r, root);
}
if(L <= m)
{
update(L, R, x, lson);
}
if(m+ <= R)
{
update(L, R, x, rson);
}
push_up(root);
} long long query(long long L, long long R, long long l, long long r, long long root)
{
long long m, result = ;
if(L <= l && r <= R)
{
return max1[root];
}
m = (l + r) >> ;
if(color[root] != -)
{
push_down(l, r, root);
}
if(L <= m)
{
result = max(result, query(L, R, lson));
}
if(m+ <= R)
{
result = max(result, query(L, R, rson));
}
push_up(root);
return result;
} struct B
{
long long x, y;
long long h;
}b[N>>]; long long a[N], hash[N]; long long bs(long long l, long long r, long long x)
{
long long m;
while(l < r)
{
m = (l + r) >> ;
if(hash[m] == x)
{
return m;
}
if(hash[m] < x)
{
l = m + ;
}
else
{
r = m;
}
}
} int cmp0(const void *a, const void *b)
{
return *(long long *)a - *(long long *)b;
} int main()
{
long long n, i, j, temp, result = ;
long long k;
scanf("%lld", &n);
for(i=; i<=n; i++)
{
scanf("%lld%lld%lld", &b[i].x, &b[i].y, &b[i].h);
a[(i-)*+] = b[i].x;
a[(i-)*+] = b[i].y;
}
qsort(a+, *n, sizeof(a[]), cmp0);
j = ;
hash[j] = a[];
for(i=; i<=*n; i++)
{
if(a[i] != a[i-])
{
j = j + ;
hash[j] = a[i];
}
}
// for(i=1; i<=j; i++)
// {
// printf("%5d", i);
// }
// printf("\n");
// for(i=1; i<=j; i++)
// {
// printf("%5d", hash[i]);
// }
// printf("\n");
build(, j-, );
for(i=; i<=n; i++)
{
// printf("update %lld %lld %lld\n", bs(1, j+1, b[i].x), bs(1, j+1, b[i].y)-1, b[i].h);
update(bs(, j+, b[i].x), bs(, j+, b[i].y)-, b[i].h, , j, );
// for(k=1; k<=j-1; k++)
// {
// printf("%4d", k);
// }
// printf("\n");
// for(k=1; k<=j-1; k++)
// {
// temp = query(k, k, 1, j, 1);
// result += (temp * (hash[k+1]-hash[k]));
// printf("%4d", temp);
// }
// printf("\n");
}
result = ;
for(i=; i<=j-; i++)
{
temp = query(i, i, , j, );
result += (temp * (hash[i+]-hash[i]));
// printf("%lld %lld %lld\n", i, temp, hash[i+1]-hash[i]);
}
printf("%lld\n", result);
return ;
}
pku3277 City Horizon的更多相关文章
- [POJ3277]City Horizon
[POJ3277]City Horizon 试题描述 Farmer John has taken his cows on a trip to the city! As the sun sets, th ...
- 离散化+线段树 POJ 3277 City Horizon
POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...
- poj City Horizon (线段树+二分离散)
http://poj.org/problem?id=3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissi ...
- 1645: [Usaco2007 Open]City Horizon 城市地平线
1645: [Usaco2007 Open]City Horizon 城市地平线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 315 Solved: ...
- bzoj1645 [Usaco2007 Open]City Horizon 城市地平线
Description Farmer John has taken his cows on a trip to the city! As the sun sets, the cows gaze at ...
- BZOJ_1654_[Usaco2007 Open]City Horizon 城市地平线_扫描线
BZOJ_1654_[Usaco2007 Open]City Horizon 城市地平线_扫描线 Description N个矩形块,交求面积并. Input * Line 1: A single i ...
- bzoj1645 / P2061 [USACO07OPEN]城市的地平线City Horizon(扫描线)
P2061 [USACO07OPEN]城市的地平线City Horizon 扫描线 扫描线简化版 流程(本题为例): 把一个矩形用两条线段(底端点的坐标,向上长度,添加$or$删除)表示,按横坐标排序 ...
- 【BZOJ1645】[Usaco2007 Open]City Horizon 城市地平线 离散化+线段树
[BZOJ1645][Usaco2007 Open]City Horizon 城市地平线 Description Farmer John has taken his cows on a trip to ...
- 【BZOJ】1645: [Usaco2007 Open]City Horizon 城市地平线(线段树+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1645 这题的方法很奇妙啊...一开始我打了一个“离散”后的线段树.............果然爆了. ...
随机推荐
- js中的json对象详细介绍
JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...
- Asp.Net生命周期系列四
上回我们说的当一个Http请求来到HttpModule这里的时候,Asp.Net内部并未对这个Http请求做出任何的处理,我们可以对这个Http请求添加一些我们需要的信息,以方便我们控制这个Http请 ...
- LA 3027 Corporative Network
这题感觉和 POJ 1988 Cube Stacking 很像,在路径压缩的同时递归出来的时候跟新distant数组 我发现我一直WA的原因是,命令结束是以字母o结束的,而不是数字0!! //#def ...
- Tyvj 1085 派对
这道题和HDU 1016的素数环那道题很相似. 虽然1A了,但写代码的过程中还是丢三落四的. 贴完代码闪人,嘿嘿 //#define LOCAL #include <iostream> # ...
- I.MX6 ov5640 camera
/************************************************************************ * I.MX6 ov5640 camera * 说明 ...
- mysql应用存储过程批量插入数据
--批量插入数据的sql语句 delimiter $$ DROP PROCEDURE IF EXISTS `test.sp_insert_batch` $$ CREATE DEFINER =`root ...
- web.xml 中的listener、 filter、servlet 加载顺序
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- 【转】shell脚本调试(bash trap support bashdb )
原文网址:http://zhu8337797.blog.163.com/blog/static/170617549201122512712136/ 命 令 选 项 功 能 bash –x 脚本名 回显 ...
- Android使用绘图Path总结
Path作为Android中一种相对复杂的绘图方式,官方文档中的有些解释并不是很好理解,这里作一个相对全面一些的总结,供日后查看,也分享给大家,共同进步. 1.基本绘图方法 addArc(RectF ...
- Linux 安装JDK7 遇到的问题
Error occurred during initialization of VMjava/lang/NoClassDefFoundError: java/lang/Object 如出现 unpac ...