小藍(lán)最近學(xué)習(xí)了一種神奇的隊(duì)列:分布式隊(duì)列。簡(jiǎn)單來(lái)說(shuō),分布式隊(duì)列包含 N 個(gè)節(jié)點(diǎn)(編號(hào)為 0 至 N ? 1,其中 0 號(hào)為主節(jié)點(diǎn)),其中只有一個(gè)主節(jié)點(diǎn),其余為副節(jié)點(diǎn)。主/副節(jié)點(diǎn)中都各自維護(hù)著一個(gè)隊(duì)列,當(dāng)往分布式隊(duì)列中添加元素時(shí)都是由主節(jié)點(diǎn)完成的(每次都會(huì)添加元素到隊(duì)列尾部);副節(jié)點(diǎn)只負(fù)責(zé)同步主節(jié)點(diǎn)中的隊(duì)列??梢哉J(rèn)為主/副節(jié)點(diǎn)中的隊(duì)列是一個(gè)長(zhǎng)度無(wú)限的一維數(shù)組,下標(biāo)為 0, 1, 2, 3 . . . ,同時(shí)副節(jié)點(diǎn)中的元素的同步順序和主節(jié)點(diǎn)中的元素添加順序保持一致。
由于副本的同步速度各異,因此為了保障數(shù)據(jù)的一致性,元素添加到主節(jié)點(diǎn)后,需要同步到所有的副節(jié)點(diǎn)后,才具有可見(jiàn)性。
給出一個(gè)分布式隊(duì)列的運(yùn)行狀態(tài),所有的操作都按輸入順序執(zhí)行。你需要回答在某個(gè)時(shí)刻,隊(duì)列中有多少個(gè)元素具有可見(jiàn)性。
第一行包含一個(gè)整數(shù) N,表示節(jié)點(diǎn)個(gè)數(shù)。接下來(lái)包含多行輸入,每一行包含一個(gè)操作,操作類(lèi)型共有以下三種:add、sync 和 query,各自的輸入格式如下:
1. add element:表示這是一個(gè)添加操作,將元素 element 添加到隊(duì)列中;
2. sync follower_id:表示這是一個(gè)同步操作,follower_id 號(hào)副節(jié)點(diǎn)會(huì)從主節(jié)點(diǎn)中同步下一個(gè)自己缺失的元素;
3. query:查詢(xún)操作,詢(xún)問(wèn)當(dāng)前分布式隊(duì)列中有多少個(gè)元素具有可見(jiàn)性。
3 add 1 add 2 query add 1 sync 1 sync 1 sync 2 query sync 1 query sync 2 sync 2 sync 1 query
0 1 1 3
【樣例說(shuō)明】
執(zhí)行到第一個(gè) query 時(shí),隊(duì)列內(nèi)容如下:
0:[1,2]1:[1,2]
2:[1]
只有下標(biāo)為 0 的元素被所有節(jié)點(diǎn)同步,因此答案為 1。執(zhí)行到第三個(gè) query 時(shí),隊(duì)列內(nèi)容如下:0:[1,2,1]1:[1,2,1]2:[1]
只有下標(biāo)為 0 的元素被所有節(jié)點(diǎn)同步,因此答案為 1。執(zhí)行到第四個(gè) query 時(shí),隊(duì)列內(nèi)容如下:0:[1,2,1]1:[1,2,1]2:[1,2,1]
三個(gè)元素都被所有節(jié)點(diǎn)同步,因此答案為 3。
【評(píng)測(cè)用例規(guī)模與約定】
對(duì)于 30% 的評(píng)測(cè)用例:1 ≤ 輸入的操作數(shù) ≤ 100。
對(duì)于 100% 的評(píng)測(cè)用例:1 ≤ 輸入的操作數(shù) ≤ 2000,1 ≤ N ≤ 10,1 ≤f ollower_id < N,0 ≤ element ≤ 105。