题目意思:给你一块玻璃块,然后切k刀,要么横切,要么竖切,对于每一刀一个询问切完这刀后,最大的那块玻璃块面积是多少?
参考其他大佬的STL大法,用set去维护切隔的边界,multiset维护已有的面积,注意切一刀时,往左右找最近的边界,然后把这长或者宽从multiset里面删去;
#include <cstdio>
#include <iostream>
#include <set>
using namespace std;
set<int> sH,sW;
multiset<int> mH,mW;
int main(){
int w,h,q;scanf("%d%d%d",&w,&h,&q);
sH.insert(0);sH.insert(h);
sW.insert(0);sW.insert(w);
mH.insert(h);mW.insert(w);
char op;int pos;
while(q--){
scanf(" %c%d",&op,&pos);
if(op == 'H'){
sH.insert(pos);
int a = *(--sH.find(pos));
int b = *(++sH.find(pos));
mH.erase(mH.find(b-a));
mH.insert(b-pos);
mH.insert(pos-a);
}else{
sW.insert(pos);
int a = *(--sW.find(pos));
int b = *(++sW.find(pos));
mW.erase(mW.find(b-a));
mW.insert(b-pos);
mW.insert(pos-a);
}
printf("%lld\n",1ll**(--mW.end())**(--mH.end()));
}
return 0;
}