题目
考虑从上往下扫,维护一排点分别表示第 i i i列已扫过的最低资源点,按这些点的纵坐标维护笛卡尔树,纵坐标越低优先级越大,那么我们的矩形下边界在扫描线时的答案就是每个点的左范围 × \times ×右范围 × \times ×深度的和,维护这一排点需要满足深度的性质,所以要用 S p a l y Spaly Spaly来把每个新出现的资源点旋上去,因为数据随机,复杂度为 O ( n log n ) O(n\log n) O(nlogn)
A C C o d e \mathrm{AC\ Code} AC Code
#include<bits/stdc++.h>
#define maxn 40005
#define rep(i,j,k) for(int i=(j),LIM=(k);i<=LIM;i++)
#define per(i,j,k) for(int i=(j),LIM=(k);i>=LIM;i--)
#define LL long long
using