問題描述
賽馬場有 n
匹馬,編號分別為 1,2,⋯,n 。進行 m 次淘汰賽,決出他們當中速度最快的一匹馬。每次淘汰賽所有編號在區間 [l,r] 並且沒有被淘汰的馬參加比賽,其中編號為 p 的馬獲勝,其他的馬都被淘汰。 m
次淘汰賽之後,只有一匹馬未被淘汰。求所有被淘汰的每一匹馬是被哪一匹馬淘汰的。
輸入格式
第一行包含兩個整數 n,m
。 接下來 m 行每行包含三個整數 l,r,p
。輸出格式
輸出一行,包含 n
個整數,兩個整數之間使用空格分隔。分別表示第 i 個整數表示淘汰第 i 匹馬的馬的編號。如果第 i 匹馬是最終的勝利者,則輸出 0
。樣例輸入
5 3
2 4 3
1 3 1
1 5 5
樣例輸出
5 3 1 3 0
資料規模和約定
對於 30% 資料: n≤1000
對於 100%
資料: 1≤m < n≤300000,1≤l≤p≤r≤n
輸入保證每場比賽 l
到 r 之間至少有兩匹馬沒有被淘汰,並且第 p 匹馬沒有被淘汰。
思路詳解
這道題比較水,模擬+技巧 即可
雙重迴圈模擬
只需要注意用乙個last陣列維護每匹馬右邊(即需要處理的下一匹)沒有被out的第一匹馬,以此為跳板,跳一跳,在內層迴圈中跳過已經out的馬。
#include
using
namespace
std;
int n,m;
int last[300010];
int ans[300010];
int main()else
if (last[j])
}j=last[j]; //跳過已out出局的馬}}
}cout
<1];
for (int i = 2; i <= n; i++)
2018國慶YALI集訓遊記
想了想,像之前那樣簡略地敘述題意和做法,根本沒講清楚,沒有任何意義,還不如寫寫自己的感受。感覺yali真的是一所挺不錯的學校吧。總是能有一機房的julao輪番吊打你,總是能有集訓隊的奆佬來給你出dltm 給你講題。每天放學回酒店的路上還能看到操場上一群目測是田徑隊之類的同學在努力地訓練著。到處都洋溢...
北大集訓2018墊底記
報道日,住的離學校挺近的,但感覺附近超市有點遠啊。下午打了場試機賽,又墊底了。試機題好可怕啊,乙個題答乙個互動,感覺自己退役穩了,不過本來就是來墊底的,也沒啥好怕的了。晚上去農園吃,感覺還行,就是沒湯有些gg 夜裡暖氣調太高了於是打低了幾度,早上起來有點冷。上午打了場day1,又墊底了。機房暖氣好足...
2018暑假集訓測試六總結
拿到試題沒幾分鐘,就有人說會做t1qaq。第一題感覺似曾相識,其實不同。梳理出本質後發現有兩個限制,便想用列舉 遞推來快速求解,發現要麼是不會推,要麼是時空超限,不會優化。期間也想過通過離線做,去掉乙個限制,但沒想出如何快速求最長連續子段長。反覆思索差不多一小時後非常絕望宣告放棄。轉而想t2,更加絕...