zoukankan      html  css  js  c++  java
  • 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 ;

    }

  • 相关阅读:
    连续多步骤业务流程的暂停、中断和恢复
    什么是XML
    泛型擦除和反射配置文件
    类加载器和反射
    网络安全协议(二)
    网络通信协议(一)
    多线程之线程安全
    JAVA之线程池
    JAVA之多线程
    2020/8/1 JAVA之IO流(四)
  • 原文地址:https://www.cnblogs.com/xiaolongchase/p/2344682.html
Copyright © 2011-2022 走看看