poj 2559 Largest Rectangle in a Histogram

維護一個單調棧,速度還可以,但是尼瑪這代碼怎麼寫着這麼蛋疼

/*
ID: daniel.20
LANG: JAVA
TASK: tour
 */

import java.util.*;
import java.io.*;
class item{
    int value,idx;
    public item(int a, int b){
        value=a;idx=b;
    }
}
class pb1{
    int n;
    item arr[];
    StringBuilder sb = new StringBuilder();
    void solver() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String t;
        while((t=reader.readLine())!=null){
            StringTokenizer st = new StringTokenizer(t);
            n = Integer.valueOf(st.nextToken());
            if(n==0) break;
            arr = new item[n+1];
            arr[0]=new item(-1, 0);
            int p=0; long max=0;
            for(int i=1;i<=n+1;i++) {
                boolean flag = false;
                int tmp = i==n+1?-1:Integer.valueOf(st.nextToken());
                while(tmp<arr[p].value){
                    flag=true;
                    long dis = i-arr[p].idx;
                    long temp = arr[p].value*dis;
                    if(temp>max) max=temp;
                    --p;                  
                }
                if(flag) {
                    arr[++p].value = tmp;
                    continue;
                }
                if(tmp>arr[p].value) arr[++p] = new item(tmp, i);
            }
            sb.append(max).append("\n");
        }        
        System.out.print(sb.toString());
    }
}
public class tour {
    public static void main(String[] args) throws Exception {
        pb1 p = new pb1();
        p.solver();        
    }
}
 


發佈了245 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章