[ZJOI2012]小蓝的好友

小蓝的好友

题解

貌似很板的一道题

好吧,由于感觉与以前做过的一些题很像,所以就想到了单调栈。

很显然,我们要求的就是所有全白的格子个数。我们对于每一行,用单调栈维护它每一列这行的白格子高度。

然后就很容易计算出它的所有矩形的方案数,一个O\left(n^{2} \right )的算法就诞生了。

可这明显会TLE。

好吧,我们发现对于每新加的一行,若i处有黑格,就把它赋值为0,否则加1吧。这东西明显还可以用平衡树维护。

于是,加上一个平衡树就是O\left(klogn \right )了,数据是随机的,不卡单调栈。

源码

很好写

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef lon
posted @ 2020-01-22 19:54  StaroForgin  阅读(10)  评论(0)    收藏  举报  来源