51Nod 1786 資料流中的演算法 眾數

2021-08-04 19:48:24 字數 1321 閱讀 4339

資料流統計功能上線後,為51nod提公升使用者體驗做出了很大的貢獻。但是新問題隨之而來,夾克老爺還想知道在乙個視窗內,訪問次數最多使用者(即視窗內的眾數)。如果有多個眾數,取使用者id最小的乙個。(視窗的意思是乙個固定長度的區間!)

第一行為整數n, k。(1 <= n <= 5 * 10^6,1 <= k <= 1000)

n代表有多少次操作,k代表視窗大小。

接下來的n行,每行代表一次操作。每行第乙個整數為運算元。

運算元2:詢問眾數

輸入格式:<2>

輸出視窗內的眾數,如果有多個,輸出id最小的那個。

p.s. 對於詢問眾數的操作,視窗保證不空

p.s.s. 對於詢問眾數的操作,視窗可能不滿

output

對於詢問眾數的操作,每行輸出乙個整數。

sample input

10 5

1 21 1

1 21 1

1 21 1

21 3

1 32

sample output11

在這次的題裡,認真的複習了queue,set,map的用法,對演算法的優化有了更深的認識,關鍵的是思路感覺更加比原來完善。

本人蒟蒻,還是需要學習。

**來了,新鮮出爐:

# include # include # include # include using namespace std;

struct node

};int read() //代替scanf,速度更快,俗稱輸入掛

return ans;

}void out(int a) //代替printf,速度更快,俗稱輸出掛

putchar(a%10 + '0');

}int main()

); //把id和出現次數弄成結點放到集合

if(q.size() == k) //如果佇列中的個數等於k,那麼想進去,

));//拿出最開始的節點,就是隊首元素

m[q.front()]--; //既然拿出,那麼個數減一

if(m[q.front()]) //如果個數不為0,就再放到集合裡);}

if(m[q.front()] == 0) //如果出現次數為0就從map中刪去可多過一組哦

q.pop(); //將第乙個扔了

}q.push(tem); //把新進來的放進去

} else

}return 0;

}

51nod1786 資料流中的演算法 眾數

資料流統計功能上線後,為51nod提公升使用者體驗做出了很大的貢獻。但是新問題隨之而來,夾克老爺還想知道在乙個視窗內,訪問次數最多使用者 即視窗內的眾數 如果有多個眾數,取使用者id最小的乙個。視窗的意思是乙個固定長度的區間!乙個map 乙個set include include include i...

51NOD 資料流中的演算法

演算法 數學 題解 1.平均數 累加字首和。聽說要向下取整?2.中位數 雙堆法,大於中位數存入小頂堆,小於中位數存入大頂堆,保證小頂堆內數字數量 大頂堆,奇數則取小堆頂,偶數則取兩堆頂 2。3.方差 平方的均值 均值的平方 即對於a,b,c,s2 a2 b2 c2 3 a b c 3 2。inclu...

51Nod 1785 資料流中的演算法

1785 資料流中的演算法 基準時間限制 1.5 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 51nod近日上線了使用者滿意度檢測工具,使用高階人工智慧演算法,通過使用者訪問時間 滑鼠軌跡等特徵計算使用者對於 的滿意程度。現有的統計工具只能統計某乙個視窗中,使用者的滿意程度的均...