CF480E Parking Lot
考场上没想出来正解,打了个60pts的暴力
暴力思路是把贡献算在正方形右下角,暴力更新
正难则反,考虑把所有点都加进去然后倒着求解
维护和
表示当前点上方和下方的可用点个数
每个点撤销必定使答案不降,每次撤销不可用的点时可以枚举答案的增加
每次更新只需要在更新的行用单调队列维护区间最小值
Code:
#include<bits/stdc++.h>
using namespace std;
inline int Read(){
int s = 0 , w = 1;
char ch = getchar();
while(ch > '9' || ch < '0'){
if(ch == '-') w = -1;
ch = getchar();
}
while(ch >= '0' && ch <= '9'){
s = (s << 1) + (s << 3) + ch - '0';
ch = getchar();
}
return s * w;
}
const int MAXN = 2000 + 5;
int n,m,k;
bool a[MAXN][