題意:給出若干個矩形,問至少覆蓋兩次的面積是多少
思路:線段樹。。我是直接更新到底,耗時較大,看了網上的200ms能過,我的花了1s,不過**簡潔。。
#include#include#includeconst int maxn = 2 * 1e3 + 10;
using namespace std;
struct mt
mt(double l, double r, double h, int a) :
l(l), r(r), h(h), add(a) {}
bool operator < (mt p) const
} mt[2 * maxn];
double x[2 * maxn], seg[4 * maxn];
int cover[4 * maxn];
int n, ql, qr, kase = 1, t;
double x1, x2, y1, y2;
void update(int node, int l, int r, int add)
int mid = (l + r) >> 1;
if(ql <= mid) update(node * 2, l, mid, add);
if(qr > mid) update(node * 2 + 1, mid + 1, r, add);
seg[node] = seg[node * 2] + seg[node * 2 + 1];
}int main()
sort(x, x + num);
sort(mt, mt + num);
int nn = unique(x, x + num) - x;
double ans = 0;
for(int i = 0; i < num - 1; i++)
printf("%.2f\n", ans);
}return 0;
}
HDU 1255 覆蓋的面積(線段樹求矩形面積交)
題意 給出n個矩形,求出至少被兩塊矩形覆蓋的面積。思路 跟面積並類似的做法,不同的是每個節點要額外維護乙個至少被覆蓋兩次的長度dcnt,此外還是要維護至少覆蓋一次的長度cnt,然後每次由當前結點的cover標記和子節點的dcnt,cnt值來推出當前結點的dcnt,cnt值。include inclu...
HDU 1255 覆蓋的面積 矩形面積並
給出若干個與軸平行的矩形,求被覆蓋了 次及以上區域的面積 簡述掃瞄線演算法 下圖 個矩形共有 條掃瞄線,我們只需要計算出相鄰兩條掃瞄線之間的被覆蓋的面積相加即可得到矩形的面積並,實現如下 對圖中的每條橫邊 豎邊也行 按它的高度從小到大排序 從下到上依次掃瞄每條橫邊 即掃瞄線 計算當前掃瞄線覆蓋的總長...
hdu 1255 覆蓋的面積 線段樹
記錄3個變數。sum i 當前區間被覆蓋2次及兩次以上的面積。num i 當前區間被覆蓋1次及一次以上的面積。cover i 覆蓋的lazy標記。對於每乙個區間.更新操作如下 void push up int now if cover rt 1 if cover rt 2 那麼剩下的問題就是簡單的區...