• P2564-[USACO12MAR]花盆Flowerpot


      1 #include<bits/stdc++.h>
      2 #define _for(i,a,b) for(register int i = (a);i < b;i ++)
      3 #define _rep(i,a,b) for(register int i = (a);i > b;i --)
      4 #define INF 0x3f3f3f3f
      5 #define MOD 100000000
      6 #define maxn 1000003
      7 #define pb push_back
      8 #define debug() printf("Miku Check OK!
    ")
      9 typedef long long ll;
     10 
     11 using namespace std;
     12 
     13 inline ll read()
     14 {
     15     ll ans = 0;
     16     char ch = getchar(), last = ' ';
     17     while(!isdigit(ch)) last = ch, ch = getchar();
     18     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
     19     if(last == '-') ans = -ans;
     20     return ans;
     21 }
     22 inline void write(ll x)
     23 {
     24     if(x < 0) x = -x, putchar('-');
     25     if(x >= 10) write(x / 10);
     26     putchar(x % 10 + '0');
     27 }
     28 struct Point
     29 {
     30     int x;
     31     int y;
     32     bool operator < (Point b)
     33     {
     34         return x < b.x;
     35     }
     36 };
     37 struct Num
     38 {
     39     int x;
     40     int y;
     41 };
     42 
     43 int n,d;
     44 Point in[maxn];
     45 Num qMax[maxn];
     46 Num qMin[maxn];
     47 int ans = INT_MAX;
     48 bool C(int m)
     49 {
     50     int frontMax,backMax;
     51     int frontMin,backMin;
     52     frontMax = 1,backMax = 0;
     53     frontMin = 1,backMin = 0;
     54     _for(i,1,n+1)
     55     {
     56         while(frontMax <= backMax && qMax[frontMax].x + m < in[i].x)
     57             frontMax ++;
     58 
     59         while(frontMin <= backMin && qMin[frontMin].x + m < in[i].x)
     60             frontMin ++;
     61 
     62         while(frontMax <= backMax && qMax[backMax].y <= in[i].y)
     63             backMax --;
     64         backMax ++;
     65         qMax[backMax].y = in[i].y;
     66         qMax[backMax].x = in[i].x;
     67 
     68         while(frontMin <= backMin && qMin[backMin].y >= in[i].y)
     69             backMin --;
     70         backMin ++;
     71         qMin[backMin].y = in[i].y;
     72         qMin[backMin].x = in[i].x;
     73         
     74         int dd = qMax[frontMax].y-qMin[frontMin].y;
     75         if(dd >= d)
     76             return true;
     77     }
     78     return false;
     79 }
     80 int solve()
     81 {
     82     int lb = in[1].x,ub = in[n].x+5;
     83     while(lb < ub)
     84     {
     85         int mid =  (lb+ub)/2;        
     86         if(C(mid)) ub = mid;
     87         else lb = mid+1;
     88     }
     89     return lb;
     90 }
     91 int main()
     92 {
     93 //    freopen("testdata (4).in","r+",stdin);
     94     n = read(),d = read();
     95     _for(i,1,n+1)
     96     {
     97         in[i].x = read();
     98         in[i].y = read();
     99     }
    100 
    101     sort(in+1,in+n+1);
    102     ans = solve();
    103     if(ans > in[n].x)
    104         write(-1);
    105     else
    106         write(ans); 
    107     return 0;
    108 }
  • 相关阅读:
    Electron(3)调用第三方DLL
    Electron(1)概述
    Java SpringMVC(6)Mybatis-Plus
    Socket粘包问题的3种解决方案
    HTTP
    2020再见 2021你好
    再谈领域驱动设计
    使用Domain-Driven创建Hypermedia API
    使用函数式语言来建立领域模型--类型组合
    PHP安装扩展
  • 原文地址:https://www.cnblogs.com/Asurudo/p/11678993.html
Copyright © 2020-2023  润新知