城市游戏POJ1964
思路
题干在这:POJ1964
逐行单调栈就好了
ac代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<queue>
#include<cstring>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
//char space[1010][1010];
int high[1010][1010];
struct tang{
int hig;
int len;
};
vector<tang> work;
int main() {
int k;
cin >> k;
for (int z = 0; z < k; z++) {
int l, h;
cin >> h >> l;
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= l; j++) {
char c = getchar();
while (c != 'R' && c != 'F')
c = getchar();
if (c == 'F')
high[i][j] = high[i - 1][j] + 1;
else
high[i][j] = 0;
}
}
int msl = 0;
for (int i = 1; i <= h; i++) {
int ms = 0;
for (int j = 1; j <= l + 1; j++) {
tang x = { high[i][j],1 };
int leni = 0;
int m=0;
while (work.size() && work.back().hig > x.hig) {
leni += work.back().len;
m = max(m, leni * work.back().hig);
work.pop_back();
}
leni += x.len;
x.len = leni;
work.push_back(x);
ms = max(ms, m);
}
work.clear();
msl = max(msl, ms);
}
cout << 3 * msl << endl;
}
}