zoukankan      html  css  js  c++  java
  • loj#6034 「雅礼集训 2017 Day2」线段游戏

    分析

    区间李超树板子题

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define db double
    const int inf = 1e8;
    const int N = 1e5;
    int n,m,is;
    struct node {
        int x1,x2;
        db y1,y2;
        node(int x1=-N,int x2=N,db y1=-1e8,db y2=-1e8):x1(x1),x2(x2),y1(y1),y2(y2) {}
    };
    node d[800100];
    inline db calc(node x,int pl){
        if(x.x2==x.x1)return max(x.y1,x.y2);
        return x.y1+(db)(x.y2-x.y1)/(x.x2-x.x1)*(pl-x.x1);
    }
    inline void update(int le,int ri,int wh,node x){
        if(x.x1>ri||x.x2<le)return;
        int mid=(le+ri)>>1;
        if(x.x1<=le&&x.x2>=ri){
            db t1=calc(d[wh],mid),t2=calc(x,mid);
          if(t1<t2){
              if(calc(d[wh],le)>calc(x,le))update(le,mid,wh<<1,d[wh]);
              if(calc(d[wh],ri)>calc(x,ri))update(mid+1,ri,wh<<1|1,d[wh]);
              d[wh]=x;
          }else {
              if(calc(x,le)>calc(d[wh],le))update(le,mid,wh<<1,x);
              if(calc(x,ri)>calc(d[wh],ri))update(mid+1,ri,wh<<1|1,x);
          }
          return;
        }
        if(mid>=x.x1)update(le,mid,wh<<1,x);
        if(mid<x.x2)update(mid+1,ri,wh<<1|1,x);
        return;
    }
    inline db q(int le,int ri,int wh,int pl){
        if(le==ri)return calc(d[wh],pl);
        int mid=(le+ri)>>1;
        db ans=calc(d[wh],pl);
        if(mid>=pl)ans=max(ans,q(le,mid,wh<<1,pl));
          else ans=max(ans,q(mid+1,ri,wh<<1|1,pl));
        return ans;
    }
    int main(){
        int i,j,k;
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;i++){
          int x1,x2,y1,y2;
          cin>>x1>>y1>>x2>>y2;
          if(x1>x2)swap(x1,x2),swap(y1,y2);
          update(1,N,1,node(x1,x2,y1,y2));
        }
        for(i=1;i<=m;i++){
          scanf("%d",&k);
          if(!k){
              int x1,x2,y1,y2;
            cin>>x1>>y1>>x2>>y2;
            if(x1>x2)swap(x1,x2),swap(y1,y2);
            update(1,N,1,node(x1,x2,y1,y2));
          }else {
              int x;scanf("%d",&x);
              db res=q(1,N,1,x);
              printf("%0.2lf
    ",res<=-inf?0:res);
          }
        }
        return 0;
    }
  • 相关阅读:
    hdu4122
    poj3410单调队列(单调栈)
    hdu3415 单调队列模板题
    网站指纹识别工具Whatweb的使用
    Python中shodan模块的使用
    Shodan的使用
    Google Hacking的用法
    PyCharm调试程序
    Python脚本与Metasploit交互进行自动永恒之蓝攻击
    关于PHP动态的接收传递的GET,POST和COOKIE变量
  • 原文地址:https://www.cnblogs.com/yzxverygood/p/11764839.html
Copyright © 2011-2022 走看看