• fzu 1894 志愿者选拔 (单调队列)


    简单单调队列。

    code:

    #include<cstdio>
    int data[1000001] ;
    int queue[1000001] ;
    int num[1000001] ;
    int h, r, n ;
    void insert(){
        if(r==h-1||data[n]<queue[r]){
            r ++ ;
            queue[r] = data[n] ;
            num[r] = n ;
        }
        else{
            while(r>=h&&data[n]>=queue[r])
                r -- ;
            queue[++r] = data[n] ;
            num[r] = n ;
        }
    }
    void getMax(){
        if(h>r) printf("-1\n") ;
        else    printf("%d\n", queue[h]) ;
    }
    int main(){
        char temp[6] ;
        int t, l ;
        scanf("%d", &t) ;
        while(t--){
            h = n = l = 0 ;
            r = -1 ;
            queue[0] = 0 ;
            scanf("%s", temp) ;
            while(true){
                scanf("%s", temp) ;
                if(temp[0]=='C'){
                    scanf("%s", temp) ;
                    scanf("%d", &data[n]) ;
                    insert() ;
                    n ++ ;
                }
                else if(temp[0]=='Q'){
                    while(r>=h&&num[h]<l)
                        h ++ ;
                    getMax() ;
                }
                else if(temp[0]=='G')
                    l ++ ;
                else break ;
            }
        }
        return 0 ;

    }

  • 相关阅读:
    spark shuffle 机制
    hive explain 源码分析
    前端jQurey
    js-dom操作
    前端JS
    前端CSS
    Redis和MongoDB区别
    MySQL数据库备份
    MySQL索引
    python连接mysql服务端
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2344682.html
Copyright © 2020-2023  润新知