qzezoj 1585 佇列重構

2021-10-23 02:39:07 字數 1031 閱讀 8873

題面傳送門

對於這道題,正著列舉是很難列舉的,但我們可以反著來。

俗話說得好,正難則反。

考慮最小的乙個數h

ih_i

hi​,則所有數都是大於等於它的,所以它的排位應該是在v

iv_i

vi​。

考慮第二小的數h

jh_j

hj​,則除了h

ih_i

hi​沒有其他數小於它,所以我們可以直接找到除了v

iv_i

vi​外的第i

ii位,它的答案就是在那裡。

以此類推。

所以我們可以將所有二元組按h

ih_i

hi​排序。然後用乙個迴圈查詢與刪除。

注意此處使用鍊錶和使用線性表是一樣的,因為鍊錶不能o(1

)o(1)

o(1)

訪問任意元素,仍舊要迴圈列舉去找。

時間複雜度o(n

2)

o(n^2)

o(n2

)**實現:

#include

#include

using

namespace std;

struct yyyf[

100039];

inline

bool

cmp(yyy x,yyy y)

int n,m,k,a[

10039

],b[

10039

],ans;

intmain()

}}for(i=

1;i<=n;i++

)printf

("%d %d\n"

,a[i]

,b[i]);

}

此題可以達到時間複雜度o(n

log2

n2

)o(nlog^2n^2)

o(nlog

2n2)

,空間複雜度o(n

)o(n)

o(n)

,此處暫不詳細展開。

qzezoj 1585 佇列重構

題面傳送門 對於這道題,正著列舉是很難列舉的,但我們可以反著來。俗話說得好,正難則反。考慮最小的乙個數 h i 則所有數都是大於等於它的,所以它的排位應該是在 v i 考慮第二小的數 h j 則除了 h i 沒有其他數小於它,所以我們可以直接找到除了 v i 外的第 i 位,它的答案就是在那裡。以此...

03 佇列操作

時間限制 100ms 記憶體限制 100kb 描述假設以帶頭節點的迴圈鍊錶表示佇列,並且只設乙個指標指向隊尾元素節點 不設頭指標 節點元素這裡設為整型,編寫佇列的初始化 入隊和出隊演算法。其中入隊元素個數n及其節點資料,和出隊元素個數m都是從鍵盤輸入 預設n m都不小於0 然後輸出出隊元素,出隊不合...

演算法(9)佇列

佇列是一種先進先出 first in first out 的資料結構,重要的元素有 頭,尾,佇列長度。佇列的操作基本有四種,驗空 isempty 驗滿 isfull 出隊 dequeue 入隊 enqueue 實現佇列有兩種方法,陣列和鍊錶。這裡陣列的程式是我自己寫的,鍊錶的則是參考 c prime...