FZU 2187 回家種地(矩形面積並)

2021-07-04 17:40:00 字數 1566 閱讀 1583

求的是只覆蓋了一次的面積並是多少。

相對於普通的面積並來說,就是求co

ver==

1 的長度,去掉了co

ver>=

1 的長度。

參考了網路上的做法,用sum維護當前區間co

ver>=

1 的長度,single維護co

ver==

1 的長度。

其他地方和普通的面積並一模一樣,只是在pushup的時候稍微多了對single的維護而已

my

code

#include 

#include

#include

#define ls (o<<1)

#define rs (o<<1|1)

#define lson ls, l, m

#define rson rs, m+1, r

using

namespace

std;

typedef __int64 ll;

const

int maxn = (int)2e5 + 5;

struct line

line(ll l, ll r, ll h, ll d) : l(l), r(r), h(h), d(d) {}

} line[maxn];

bool cmp(line a, line b)

int n, m, tot;

ll x[maxn];

ll sum[maxn<<2], single[maxn<<2];

int cover[maxn<<2];

void build(int o, int l, int r)

inline

void pushup(int o, int l, int r) else

if(l == r) sum[o] = single[o] = 0;

else

}void modify(int o, int l, int r, int ql, int qr, int d)

int m = (l + r)/2;

if(ql <= m) modify(lson, ql, qr, d);

if(qr > m) modify(rson, ql, qr, d);

pushup(o, l, r);

}int find(int x)

return -1;

}int main()

sort(x, x+m);

tot = unique(x, x+m) - x;

sort(line, line+m, cmp);

build(1, 0, tot-1);

ll ans = 0;

int ql, qr;

for(int i = 0; i < m; i++)

printf("case %d: %i64d\n", cas++, ans);

}return

0;}

1445 回家 推薦 的題解

description alice住在森林裡,森林可以看作是n m的網格,森林裡有怪獸,用 表示空地,表示怪獸,v 表示alice現在的位置,j 表示alice的家。alice可以從當前單元格向上下左右相鄰單元格移動,有怪獸的地方也可以走,只不過比較危險,有怪獸的單元格對其他單元格會產生一定的危險係...

NOI2019 回家路線

點此看題 首先可以用暴力dpdp dp艹過去,設dp i j dp i j dp i j 為到了i ii點的時間是j jj的最小花費,由於時間是單向流逝的,我們可以先把邊按出發時間排序,用邊轉移,列舉到達出發點的時間jjj d p y i q i dp x i j cost p i j dp y i...

NOI2019 回家路線

link solution 演算法一通過觀察範圍發現 q leq1000 所以直接暴力拆點 dp 時間複雜度 o 1000m o 能過 演算法二因為有 a times x 2 b times x c 考慮斜率優化。設 f i 表示走完第 i 條邊的最小煩躁值,則 f i min space u i ...