本题可简化为在一个区间内不断添加不同的点,求相邻两点最大距离为多少。
竟然不知道,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; } }