t2:
設f[i]表示當前第i個人認識的最右邊的人的編號。
50分做法:
每次列舉l,r之間的i,當f[i]初始值:f[i]=i
100分做法:
我們發現f[i]是遞增的,所以我們考慮用線段樹維護f[i]。
設f1表示區間的最大值,f2表示區間的最小值,f3表示區間的和。
我們每次要找出乙個s,使得l<=s<=r且f[s]求sum的一步可以用區間查詢來完成,在做完這一步之後我們要把f[l~s]的值賦為r,這一步可以用區間修改來完成,關鍵是怎樣求s。
我們可以用f1,f2來求s,我們每一次從線段樹的根節點開始往下走,直到走到乙個葉節點,這個葉節點就是答案,下面說說怎樣走。
假設當前的左子樹是l,右子樹是r,要查詢的值為w,那麼
若f1[l]>=w,則往左走
else 若f2[r]>=w,則往左走
else 往右走
那麼f[i][0]=min(f[i+1][0],f[i+1][1])+c[i],f[i+1][1]=min(f[j][0]+(j-i+1)*(j-i)/2)。
這是o(n^2)的演算法,只有60分,所以我們要優化。
我們發現,若當前有j100分只需在這個基礎上加乙個小小的優化,每次列舉棧時要從上往下列舉,若當前的棧中元素的轉移所需的費用((j-i+1)*(j-i)/2)已經不小於f[i][1]了,那麼就break。這樣就可以ac了。
NOIP提高組 矩陣
在麥克雷的面前出現了乙個有n m個格仔的矩陣,每個格仔用 或 表示,表示這個格仔可以放東西,則表示這個格仔不能放東西。現在他拿著一條1 2大小的木棒,好奇的他想知道對於一些子矩陣,有多少種放木棒的方案。因為棍子是1 2的,所以很容易就能發現,兩個被分割的塊,除了跨越兩個塊擺放木棍的方案數會對答案有影...
NOIP提高組2005 過河
過河 river 問題描述 在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的...
NOIP提高組 20151029模擬
其實這套題目並不算太難,但是還是發揮不了100 水平。第一題直接線性篩法,求出質數,然後就可以判斷乙個數是否為質數了。這道題還可以用miller rabin去求,後者的速度較快,如果資料再大些,就要使用後者了。第二題,比賽時發現了,當n 7時,答案會每四個一迴圈,但是就沒有繼續往下想,其實想下去會想...