#296 --- C ( set可以这么好用)

本题可简化为在一个区间内不断添加不同的点,求相邻两点最大距离为多少。

竟然不知道,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;
      }
}


你可能感兴趣的:(C++,算法,uva)