zoukankan      html  css  js  c++  java
  • [模板][李超线段树][JSOI 2008] Blue Mary开公司

    题目大意

    每次给整个区间内加入一个一次函数,求单点最大值。

    Code

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    
    #define RG register int
    #define LL long long
    
    const int Index=50010;
    double k[100010],b[100010];
    int SegTree[200010];
    int N,Num=0;
    
    inline double f(int ID,int x){return k[ID]*(x-1)+b[ID];}
    
    void Update(int Root,int L,int R,int ID){
        if(L==R){
            if(f(ID,L)>f(SegTree[Root],L))
                SegTree[Root]=ID;
            return;
        }
        int mid=(L+R)>>1;
        if(k[ID]>k[SegTree[Root]]){
            if(f(ID,mid)>f(SegTree[Root],mid)){
                Update(Root<<1,L,mid,SegTree[Root]);
                SegTree[Root]=ID;
            }
            else Update(Root<<1|1,mid+1,R,ID);
        }
        else if(k[ID]<k[SegTree[Root]]){
            if(f(ID,mid)>f(SegTree[Root],mid)){
                Update(Root<<1|1,mid+1,R,SegTree[Root]);
                SegTree[Root]=ID;
            }
            else Update(Root<<1,L,mid,ID);
        }
        return;
    }
    
    double Query(int Root,int L,int R,int x){
        if(L==R) return f(SegTree[Root],x);
        int mid=(L+R)>>1;
        if(x<=mid) return max(f(SegTree[Root],x),Query(Root<<1,L,mid,x));
        return max(f(SegTree[Root],x),Query(Root<<1|1,mid+1,R,x));
    }
    
    int main(){
        char opt[20];
        scanf("%d",&N);
        for(RG i=1;i<=N;++i){
            scanf("%s",opt);
            if(opt[0]=='Q'){
                int x;scanf("%d",&x);
                printf("%d
    ",(int)(Query(1,1,Index,x)/100.0));
            }
            else{
                ++Num;
                scanf("%lf%lf",&b[Num],&k[Num]);
                Update(1,1,Index,Num);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    HNOI 2006 BZOJ 1195 最短母串
    BZOJ 3029 守卫者的挑战
    Codeforces 401D Roman and Numbers
    ZJOI2010 数字计数
    BZOJ 3329 Xorequ
    Codeforces 235 C
    SPOJ 8222 Substrings
    BZOJ 1396 识别子串
    (模板)归并排序
    poj3122 Pie (二分)
  • 原文地址:https://www.cnblogs.com/AEMShana/p/12334713.html
Copyright © 2011-2022 走看看