2010年11月1日 星期一

奇怪的老闆

內容 : 正體->简体
有一個很古怪的老闆,他有N名員工,每個人有自己的薪水,這個老闆很喜歡去找出編號第A到編號到B之間的最高薪水與最低薪水的差,但是你以為他只找一次嗎?當然不是,他有強迫症,他每隔1秒就隨機寫兩個數字,然後找出這段數字裡最多薪水的錢,並寫下來作成紀錄。

老闆每次都要他的秘書幫他找,他的秘書受不了,想請你幫她寫一個程式讓他可以很迅速的找到,在這區間最高薪水與最低薪水的差是多少錢, 好讓他可以輕鬆一下。

輸入說明 :
第一行有兩個數字N(1 ≤ N ≤ 50,000), Q (1 ≤ Q ≤ 200,000) 代表有N名員工跟Q個問題。

接下來有 N行代表第1~N名的員工薪水。

在接下來的Q行有兩個數字 a,b
"(0 < a < = b < = n)" 代表老闆寫的兩個數字,請你找出這段區間的最高薪水與最低薪水的差。

輸出說明 :
對於每一個問題,印出最高薪水與最低薪水的差為何?並換行。
範例輸入 :

6 3
1
7
3
4
2
5
1 5
4 6
2 2
範例輸出 :

6
3
0

3 則留言:

  1. Dim dat(50000) As Integer
    Public Sub Form_Load()
    Me.Hide
    Open App.Path & "/in.txt" For Input As #1
    Open App.Path & "/out.txt" For Output As #2
    Input #1, x, y
    For i = 1 To x
    Input #1, dat(i)
    Next i
    For i = 1 To y
    Input #1, n, mm
    Max = 1: Min = 99
    For j = n To mm
    If dat(j) > Max Then Max = dat(j)
    If dat(j) < Min Then Min = dat(j)
    Next j
    Print #2, Max - Min
    Next i
    Close #2
    Close #1
    End
    End Sub

    BY Yung

    回覆刪除
  2. Dim Q As Long
    Private Sub Form_Load()
    Me.Hide
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Input #1, Ne, Nq
    ReDim Pay(Ne) As Integer
    For i = 1 To Ne
    Input #1, Pay(i)
    Next i
    For kkk = 1 To Nq
    Input #1, A, B
    Max = 1
    Min = 9999
    For i = A To B
    If Max <= Pay(i) Then Max = Pay(i)
    If Min >= Pay(i) Then Min = Pay(i)
    Next i
    Print #2, Max - Min
    Next kkk
    Close #2
    Close #1
    End
    End Sub


    BY小白

    回覆刪除
  3. 兩個的程式也都ok,
    這題還有個小問題,就是起始值。
    你們如何去設定最初的最大和最小呢?
    其實,可能比較保險的做法,
    是用第一個人的值,同時來當最大值和最小值。
    不然,要是全部都比9999大呢? 還是全部都比1小呢。

    回覆刪除