本题可简化为在一个区间内不断添加不同的点,求相邻两点最大距离为多少。
竟然不知道,multiset删除元素时候,只删除一个同值元。
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>
#include <cmath>
#include <set>
using namespace std;
set<int> w,h;
multiset<int> wws,hs;
void In(set<int>& s,multiset<int>& st,int p){
set<int> ::iterator it1=s.lower_bound(p),it2=it1;
it2--;
int x = *it1,y=*it2;
st.erase(st.find(x-y));
st.insert(p-y);
st.insert(x-p);
s.insert(p);
}
int main()
{
int n,m,Q;
scanf("%d %d %d",&n,&m,&Q);
w.insert(0); w.insert(n); wws.insert(n);
h.insert(0); h.insert(m); hs.insert(m);
while(Q--){
char cmd[10];
int p;
scanf("%s %d",cmd,&p);
if(cmd[0]=='V'){
In(w,wws,p);
}
else In(h,hs,p);
cout<<(long long)(*(wws.rbegin()))*(*(hs.rbegin()))<<endl;
}
}