zoukankan      html  css  js  c++  java
  • hdu 4006 The kth great number

    Java  写了一个优先队列   不知道咋的  速度没有快多少;

    import java.util.Random;
    import java.util.Scanner;
    import java.util.PriorityQueue;
    import java.util.Queue;
    import java.io.File;
    import java.io.InputStream;
    import java.io.FileInputStream;
    import java.io.PrintStream;
    import java.io.FileOutputStream;
    
    class Tree{
        public Tree ltTree = null; 
        public Tree rtTree = null;
        public int value;
        public Tree( int value ){
            this.value = value; 
        }
    }
    
    class Priority{
        public Priority( ){ total = 0; }
        public Tree treeNode[] = new Tree[2200000];
        
        public int total;
        public void clear(){  total = 0;
            for( int i = 0; i < 2200000; i++ )
            treeNode[i] = null; 
        }
        public int size(){ return total; }
        public int top(){  return treeNode[1].value;  }
        
        public Tree creat( int value,int postion ) {
            return  treeNode[postion] = new Tree( value );
        }
        public void swap( Tree a,Tree b ){
            int c = a.value; a.value = b.value; b.value = c;
        }
        public void heapIncreaseKey( int i ){
            if( i == 1 )return;
            if( treeNode[i].value < treeNode[i>>1].value ){
                swap( treeNode[i],treeNode[i>>1] );
                heapIncreaseKey(i>>1);
            }
        }
        public void heapExtractMax( int i ){
            Tree Max = treeNode[i]; boolean fell = false;
            if( treeNode[i<<1] != null && treeNode[i<<1].value < Max.value ){
                Max = treeNode[i<<1]; fell = true;
            }
            if( treeNode[i<<1|1] != null && treeNode[i<<1|1].value < Max.value ){
                swap( treeNode[i<<1|1],treeNode[i] );
                heapExtractMax( i<<1|1 );
                return;
            }
            if( fell ){
                swap( treeNode[i<<1],treeNode[i] );
                heapExtractMax( i<<1 );
            }
        }
        public void push( int value ){
           if( total == 0 ){
                creat(value,++total);
           }else{
               Tree nowTree = creat(value,++total);
               if( (total&1) == 1 ) 
                    treeNode[total>>1].rtTree = nowTree;
               else treeNode[total>>1].ltTree = nowTree;
               heapIncreaseKey( total );
           }
        }
        public void pop( ){
              if( total == 0 ){ return; }
              if( total == 1 ){ --total; return; }
            swap( treeNode[1],treeNode[total] ); 
            treeNode[total] = null;
            if( (total&1) == 1 ) 
                  treeNode[total>>1].rtTree = null; 
            else  treeNode[total>>1].ltTree = null; 
            --total; heapExtractMax( 1 ); 
        }
    }
    public class PriorityQueueClass 
    {
        public static void main( String str[] )throws Exception{
           /*
           Random rad = new Random();
           File file = new File("D:"+File.separator+"in.txt");  
           if( !file.exists() )file.createNewFile();
           System.setOut(new PrintStream(new FileOutputStream( file )) );
          
           int num = rad.nextInt(100)+1000; System.out.println(num + " "+rad.nextInt(10000)+2);
           while( num != 0 ){
               int temp = rad.nextInt(2);
               if( temp == 0 ){
                   System.out.println("I"+" "+rad.nextInt(1000000));
               }else if( temp == 1 ){
                   System.out.println("Q");
               }
               num--;
           } 
           */
           /*
           File file1 = new File("D:"+File.separator+"in.txt");
           File file2 = new File("D:"+File.separator+"out.txt");
           if( !file2.exists() )file2.createNewFile();
           System.setOut(new PrintStream(new FileOutputStream(file2)) );
           Scanner cin = new Scanner(file1);
           
           int N = cin.nextInt(),M;
           while( N != 0 )
           {
               int fell = cin.nextInt();
               if( fell == 0 ){
                   int temp = cin.nextInt();
                   que.push( temp );
                   que2.add( (Integer)temp );
               }else if( fell == 1 ){
                   if( que.size() != 0 ){
                       int temp1 = que.top();
                       int temp2 = que2.peek();
                       System.out.print(temp1+" ");
                       System.out.println(temp2);
                   }
               }else{
                   if( que.size() != 0 ){
                       que.pop();
                       que2.poll();
                   }
               }
               N--;
           }
           */
           //File file2 = new File("D:"+File.separator+"out2.txt");
           //System.setOut(new PrintStream(new FileOutputStream(file2)) );
            
           Scanner cin = new Scanner(System.in); int N,M;
           while( cin.hasNext() ){
               String cha = new String();  
               Priority que = new Priority();
               N = cin.nextInt(); M = cin.nextInt();
               for( int i = 0; i < N; i++ ){
                   cha = cin.next();
                   if( cha.charAt(0) == 'I' ){
                      int temp = cin.nextInt();
                          que.push(temp);
                          if( que.size() > M )que.pop();
                    }
                    else System.out.println(que.top());
               }
           }
        }
    }
    
    /*
    10 14 9 2 9 15 18 12 15 17 
    
    10 14 9 2 9 15 18 12 15 17 
    2 9 10 12 9 15 18 14 15 17 
    
    */
    View Code
  • 相关阅读:
    Raspberry Pi + ArchLinux:网络dhcp不稳定,经常无法获取IP地址
    Chromium OS相比Chrome OS缩水的地方
    ssh config配置更新
    ktouch w619: Dump boot.img和system.img,然后做成recovery可用的刷机zip包
    mmap: invalid argument & MAP_PRIVATE
    Ubuntu 12.04 fcitx已经可以aptget,并且默认是是Google拼音的词库
    epoll_create, epoll_ctl和epoll_wait 实例讲解
    VM上安装Redhat无法选包
    关于Segmentation fault (core dumped)几个简单问题的整理
    Linux字符串转换函数汇总
  • 原文地址:https://www.cnblogs.com/wulangzhou/p/3630997.html
Copyright © 2011-2022 走看看