資料流中的演算法

2021-08-22 04:24:33 字數 1172 閱讀 9495

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

input

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

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

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

運算元1:使用者訪問 

輸入格式: <1, id> 

使用者id為0,intmax0,intmax閉區間內的整數。代表擁有此id的使用者對**進行了一次訪問,視窗進行相應移動。 

運算元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 output

1

1

對stl的熟練運用,加上卡常,普通的scanf 和printf 都會很慢,手寫乙個輸入輸出流(俗稱 輸入掛,輸出掛)

**:

#include

using namespace std;

struct node

};int read()//輸入掛

return ans;

}void out(int a)

putchar(a%10 + '0');

}int main()

);//將輸入的id存入set

if(q.size() == k)));//找到佇列的首位並且刪除

f[q.front()]--;//佇列的首位排出那麼他的數量減一

if(f[q.front()]));//重新存入set

}if(f[q.front()] == 0)

q.pop();

}q.push(b);

}else

}

1785 資料流中的演算法

51nod近日上線了使用者滿意度檢測工具,使用高階人工智慧演算法,通過使用者訪問時間 滑鼠軌跡等特徵計算使用者對於 的滿意程度。現有的統計工具只能統計某乙個視窗中,使用者的滿意程度的均值。夾克老爺想讓你為統計工具新增乙個新feature,即在統計均值的同時,計算視窗中滿意程度的標準差和中位數 均值需...

資料流中的中位數python 資料流中的中位數

python用的自己實現的最大和最小堆的class,getmedian需要加個引數,否則python版會報錯。coding utf 8 最小堆 class minheap def init self self.minheap def len self return len self.minheap ...

51NOD 資料流中的演算法

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