資料結構 sfdg 小F打怪

2022-07-08 09:39:11 字數 1432 閱讀 6341

問題描述

小 f 很愛打怪, 今天因為系統 bug, 他提前得知了 n 只怪的出現順序以及擊

倒每只怪得到的成就值 ai。 設第一只怪出現的時間為第 1 秒,這個遊戲每過 1 秒

鐘出現乙隻新怪且沒被擊倒的舊怪消失。 小 f 決定發動一次技能, 他的技能最多

維持 k 秒, 他希望獲得最大的成就值,請你幫他計算他發動技能的時間 l 和技能

結束時間 r(r-l+1<=k)。 當存在多種方案使得成就值最大時,選擇技能發動時間 l

最小的方案, 再選擇技能持續時間 r-l+1 最小的方案。

★資料輸入

輸入第一行為兩個正整數 n(1<=n<=100000), k(0,表示出現 n 只怪,

小 f 的技能最多維持 k 秒。

輸入第二行為 n 個整數,表示小 f 擊倒第 i 秒鐘出現的怪能給有獲得的成就

值 ai(-1000<=a[i]<=1000)。

★資料輸出

輸出為一行三個數。第乙個數為可獲得的最大成就值,第二個數為技能發動

時間 l,第三個數為技能結束時間 r。

輸入示例

輸出示例

6 3-1 2 -6 5 -5 6

6 4 6

輸入示例

輸出示例

5 5-1 -1 -1 -1 -1

-1 1 1

思路雙端佇列

code

1 #include 2 #include 3

4struct

node5;

910intmain()

1122

23int max_l = 1, max_r = 1, max_hap = p[1

];24 node *que = (node *)malloc(sizeof(node)*(n+1

));25

int l=0,r=0

;26 que[r].data = p[0

];27 que[r].index = 0;28

29for (i = 1; i <= n; i++)

3035

36int val = p[i] -que[l].data;

37if (val >max_hap)

3843

44while (l<=r && p[i]4548 r++;

49 que[r].data =p[i];

50 que[r].index =i;51}

52 printf("

%d %d %d\n

", max_hap, max_l, max_r);

5354

free

(p);

55free

(que);

5657

return0;

58 }

資料結構小總結

線性表是一種典型的線性結構。頭結點無前驅有乙個後繼,尾節點無後繼有乙個前驅。鍊錶只能順序查詢,定位乙個元素的時間為o n 刪除乙個元素的時間為o 1 線性表的順序儲存結構 把線性表的結點按邏輯順序依次存放在一組位址連續的儲存單元裡。用這種方法儲存的線性表簡稱順序表。是一種隨機訪問的儲存結構。順序儲存...

資料結構之小演算法

1 給定乙個整數n,那麼n的階乘n!末尾有多少個0呢?例如 n 10,n!3 628 800,n!的末尾有兩個0。int zeronumber int num return ret int main return count 3 查詢乙個字串中第乙個只出現兩次的字元。比如 abcdefabcdefa...

資料結構小知識點

1,鍊錶專業術語 首節點 第乙個有效節點 尾節點 最後乙個有效節點 頭結點 第乙個有效節點之前的那個節點,頭結點並不存放有效資料,加頭結點的目的主要是為了方便對鍊錶的操作 頭指標 指向頭結點的指標變數 尾指標 指向尾節點的指標變數 2,棧的分類 靜態棧 用陣列實現 動態棧 用鍊錶實現 3,迴圈佇列 ...