求的是只覆蓋了一次的面積並是多少。
相對於普通的面積並來說,就是求comyver==
1 的長度,去掉了co
ver>=
1 的長度。
參考了網路上的做法,用sum維護當前區間co
ver>=
1 的長度,single維護co
ver==
1 的長度。
其他地方和普通的面積並一模一樣,只是在pushup的時候稍微多了對single的維護而已
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 ...