【HDOJ】1542 Atlantis
离散化+线段树+扫描线,求覆盖面积。
/* 1542 */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <deque>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
#include <cassert>
#include <functional>
#include <iterator>
#include <iomanip>
using namespace std;
//#pragma comment(linker,"/STACK:102400000,1024000") #define sti set<int>
#define stpii set<pair<int, int> >
#define mpii map<int,int>
#define vi vector<int>
#define pii pair<int,int>
#define vpii vector<pair<int,int> >
#define rep(i, a, n) for (int i=a;i<n;++i)
#define per(i, a, n) for (int i=n-1;i>=a;--i)
#define clr clear
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define all(x) (x).begin(),(x).end()
#define SZ(x) ((int)(x).size())
#define lson l, mid, rt<<1
#define rson mid+1, r, rt<<1|1 typedef struct segment_t {
double l, r, h;
int f; friend bool operator< (const segment_t& a, const segment_t& b) {
return a.h < b.h;
} } segment_t; typedef struct {
int l, r, c;
double len;
} node_t; const int maxn = ;
double X[maxn];
segment_t seg[maxn];
node_t nd[maxn<<]; void build(int l, int r, int rt) {
nd[rt].l = l;
nd[rt].r = r;
nd[rt].c = ;
nd[rt].len = ; if (l == r)
return ; int mid = (l + r) >> ;
build(lson);
build(rson);
} void PushUp(int rt) {
if (nd[rt].c)
nd[rt].len = X[nd[rt].r+] - X[nd[rt].l];
else if (nd[rt].r == nd[rt].l)
nd[rt].len = ;
else
nd[rt].len = nd[rt<<].len + nd[rt<<|].len;
} void update(int L, int R, int delta, int rt) {
if (L<=nd[rt].l && nd[rt].r<=R) {
nd[rt].c += delta;
PushUp(rt);
return ;
} int mid = (nd[rt].l + nd[rt].r) >> ; if (mid >= R) {
update(L, R, delta, rt<<);
} else if (mid < L) {
update(L, R, delta, rt<<|);
} else {
update(L, R, delta, rt<<);
update(L, R, delta, rt<<|);
} PushUp(rt);
} int main() {
ios::sync_with_stdio(false);
#ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif int n, m, xn;
double x1, x2, y1, y2;
double ans;
int L, R;
int tt = ; while (scanf("%d",&n)!=EOF && n) {
ans = .;
m = ;
rep(i, , n) {
scanf("%lf %lf %lf %lf", &x1,&y1,&x2,&y2);
seg[m].l = seg[m+].l = x1;
seg[m].r = seg[m+].r = x2;
seg[m].h = y1;
seg[m].f = ;
seg[m+].h = y2;
seg[m+].f = -; X[m] = x1;
X[m+] = x2; m += ;
} sort(seg, seg+m);
sort(X, X+m);
xn = unique(X, X+m)-X; build(, xn-, ); rep(i, , m) {
L = lower_bound(X, X+xn, seg[i].l) - X;
R = lower_bound(X, X+xn, seg[i].r) - X - ;
update(L, R, seg[i].f, );
ans += (seg[i+].h - seg[i].h) * nd[].len;
#ifndef ONLINE_JUDGE
printf("L = %d, R = %d, len = %.2lf\n", L, R, nd[].len);
#endif
} printf("Test case #%d\n", ++tt);
printf("Total explored area: %.02lf\n\n", ans);
} #ifndef ONLINE_JUDGE
printf("time = %d.\n", (int)clock());
#endif return ;
}
【HDOJ】1542 Atlantis的更多相关文章
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【POJ】1151 Atlantis(线段树)
http://poj.org/problem?id=1151 经典矩形面积并吧.....很简单我就不说了... 有个很神的地方,我脑残没想到: 将线段变成点啊QAQ这样方便计算了啊 还有个很坑的地方, ...
- 【HDOJ】【3506】Monkey Party
DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...
- 【HDOJ】【3480】Division
DP/四边形不等式 要求将一个可重集S分成M个子集,求子集的极差的平方和最小是多少…… 首先我们先将这N个数排序,容易想到每个自己都对应着这个有序数组中的一段……而不会是互相穿插着= =因为交换一下明 ...
- 【HDOJ】【2829】Lawrence
DP/四边形不等式 做过POJ 1739 邮局那道题后就很容易写出动规方程: dp[i][j]=min{dp[i-1][k]+w[k+1][j]}(表示前 j 个点分成 i 块的最小代价) $w(l, ...
- 【HDOJ】【3415】Max Sum of Max-K-sub-sequence
DP/单调队列优化 呃……环形链求最大k子段和. 首先拆环为链求前缀和…… 然后单调队列吧<_<,裸题没啥好说的…… WA:为毛手写队列就会挂,必须用STL的deque?(写挂自己弱……s ...
- 【HDOJ】【3530】Subsequence
DP/单调队列优化 题解:http://www.cnblogs.com/yymore/archive/2011/06/22/2087553.html 引用: 首先我们要明确几件事情 1.假设我们现在知 ...
- 【HDOJ】【3068】最长回文
Manacher算法 Manacher模板题…… //HDOJ 3068 #include<cstdio> #include<cstring> #include<cstd ...
随机推荐
- invalid code signing entitlement的通用暴力解决办法
1.添加的一台苹果设备为开发机子后,打版本,说profile 没找到,报错 2.上传二进制文件到itunes connect ,报错 3.有时候还什么 appID 无效,报错 烦死他了 我的解决办法, ...
- 源代码jar包中中文注释乱码
目前公司开发的多个组件有打包源代码并发布到nexus,但是很多同事通过maven使用组件时,直接通过eclipse浏览源代码时,发现中文注释为乱码的问题.其实这个eclipse默认编码造成的问题.可以 ...
- iOS项目里面如何清理缓存
在正式讲解以前,请先看一下以下图片,在以下这款APP种设有清理缓存,开始我以为很复杂,在弄明白之后,其实就是几句代码就解决了. 在实际项目开发中,我们很多的文件都会缓存在沙盒里面,比如:照片 ...
- css3中的BFC,IFC,GFC和FFC(转载)
作者原文网址:http://www.cnblogs.com/dingyufenglian/p/4845477.html What‘s FC? 一定不是KFC,FC的全称是:Formatting C ...
- 在ctex环境下利用Metapost作图
使用Metapost作图,是LaTeX的好搭档.下面介绍如何在ctex环境下的使用Metapost作图. 首先新建一个test.mp的Metapost文件. 在文件开始需要声明如下代码: prolog ...
- 使用webstorm上传代码到github
使用webstorm上传代码到github 字数681 阅读330 评论0 喜欢5 之前使用过webstorm上传代码到github,过了几个月竟然发现自己忘记了,好记性不如烂笔头啊,今天又重新用了一 ...
- /dev/null 2>&1 解释(转)
cmd >a 2>a 和 cmd >a 2>&1 为什么不同? cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍, ...
- php中的preg系列函数
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int ...
- hdu 1568 Fibonacci 数学公式
Fibonacci Problem Description 2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到的Fibonacci数列(f[0]=0,f[1]=1;f[i] = ...
- hdu 1427 dfs
速算24点 题意:随机给你四张牌,包括 A(1),2,3,4,5,6,7,8,9,10,J(11),Q(12),K(13).要求只用'+','-','*','/'运算符以及括号改变运算 顺序,使得最终 ...