zoukankan      html  css  js  c++  java
  • HDU_6695 Welcome Party 【思维】

    一、题目

      Welcome Party

    二、分析

      最开始的时候分析错了,认为只要找两个类型中的最小差值就可以了,忽略了是求两个类型中最大值的最小差值。

      那么可以对第一个类型进行从大到小排序,枚举这个类型的最大值,那么,枚举过的这个类型的人就不再选这个类型的值,而是选第二类型。

      考虑对第二个类型处理,枚举过的需要维护一个最大值,对于底下还没枚举的,需要维护一个有序的序列,方便查找,如果还没枚举到的需要找到最接近当前枚举的这个值,用$multiset$维护,二分找时可能找不到,也可能找到后是比这个值小的那个更优,这里要处理一下。

      对于取绝对值,$abs$用于整型,$fabs$用于浮点型,一直WA的原因也是这里。

    三、AC代码

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 #define ll long long
     5 #define Min(a,b) ((a)>(b)?(b):(a))
     6 #define Max(a,b) ((a)>(b)?(a):(b))
     7 #define P pair<int, int>
     8 const int MAXN = 1e5 + 13;
     9 struct node {
    10     ll x, y;
    11     bool operator < (const node &t) {
    12         return x > t.x;
    13     }
    14 }A[MAXN];
    15 
    16 int main()
    17 {
    18     //freopen("input.txt", "r", stdin);
    19     // freopen("out.txt", "w", stdout);
    20     int T, N;
    21     scanf("%d", &T);
    22     while(T--) {
    23         scanf("%d", &N);
    24         multiset<ll> ST;
    25         for(int i = 1; i <= N; i++) {
    26             scanf("%lld%lld", &A[i].x, &A[i].y);
    27             ST.insert(A[i].y);
    28         }
    29         sort(A + 1, A + 1 + N);
    30         ll ans = 2e18;
    31         ll ym = -1e18;    //记录删掉的y中最大的值
    32         for(int i = 1; i <= N; i++) {
    33             ST.erase(ST.find(A[i].y));
    34             if(ym >= 0) {
    35                 ans = Min(ans, abs(A[i].x - ym));
    36             }
    37             if(!ST.empty()) {
    38                 auto itr = ST.lower_bound(A[i].x);
    39                 if(itr == ST.end()) {
    40                     itr--;  
    41                 }
    42                 ll res = *itr;
    43                 if(res > ym) {
    44                     ans = Min(ans, abs(A[i].x - res));
    45                 }
    46                 if(itr != ST.begin()) {
    47                     itr--;
    48                     res = *itr;
    49                     if(res > ym) {
    50                         ans = Min(ans, abs(A[i].x - res));
    51                     }
    52                 }
    53             }
    54             ym = Max(ym, A[i].y);
    55         }
    56         printf("%lld
    ", ans);
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    内存泄漏 Memory Leaks 内存优化 MD
    Handler Thread 内部类引起内存泄露分析
    为什么不取消注册BroadcastReceiver会导致内存泄漏
    WebChromeClient 简介 API 案例
    WebViewClient 简介 API 案例
    java.net.URI 简介 文档 API
    android.net.Uri 简介 API
    RV 多样式 MultiType 聊天界面 消息类型 MD
    JS函数声明与定义,作用域,函数声明与表达式的区别
    CSS中table tr:nth-child(even)改变tr背景颜色: IE7,8无效
  • 原文地址:https://www.cnblogs.com/dybala21/p/11405849.html
Copyright © 2011-2022 走看看