#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;
      }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值