總結20170317那一周
這是筆者當時的總結,部分東西過於naive,敬請理解。
近來,考了幾套NOIP真題,另外偉大的斯堪福·胡也給考了幾道,余以為甚為有趣。之前已經寫了一些總結,但總還認為不夠。
20170317 |
Math (mhy12345) |
Sequence 0 |
Calc 100 |
Cube 0 |
|
20170318 |
Data Structure (idy002) |
Rotinv 60 |
Rise 0 |
Seqmod 30 |
|
##**20170317 Math(mhy12345)
Sequence是一道很有趣的題,單峰隊列……
因為不好畫圖,請自行腦補……
當時,看到這道題,整個人是蒙蔽的。畫了一下圖,模擬了幾組數據,才明白題意。**所以,稍微多花一點時間審題,真的是很重要的。**
**另外,不得不說,此題的樣例太水了,實在是太水了。(所以說,樣例對了並不能說明你真的看懂了這道題)**例如,我開始時猜了幾種通項公式,結果統統否定了。話說這種題,不求通項O(1)求解簡直是無稽之談。
直到最後,我才發現,居然就是……
2n-2
當時,我半信半疑(事後推了出來),但還是用了,只不過long long×long long爆了……
** P. S. : lmy說,laekov是一名人稱“何家坳”的稀有生物……**
Calc就是求逆元。
這裏稍微總結一下求逆元的方法。
Cube這道題啊,很有價值(超立方體可以讓人大開眼界)。
它的遞推公式相對好推,但通項公式的確難懂。
但是,僅僅如此還是不夠,得加上線性篩。幸好有中。
##**20170318 Data Structure(idy002) **
Rotinv這道題可以讓我們深度理解**樹狀數組**。因為n個序列中,可以輕松算出任意兩項的先後位置關系,之後便能寫出前綴和數學公式,套上樹狀數組。
**但是,此法不算最優,因為開了兩倍空間。而且,註意,這類題目 long long要多開(為此WA40分)。**
Rise很有趣,因為我們可以不用線段樹。
點與點之間有一些next的關系,中間的可以直接跳過。
** next[i] = min{ j | aa[i] < aa[j] 且 i < j }**
readin(n);readin(m);
for( int i = 1; i <= n; i++ ) readin(aa[i]);
for( int i = 1; i <= n; i++ )
for( int j = i+1; j <= n; j++ )
if( aa[i] < aa[j] ) {
next[i] = j;
break;
}
while( m-- ) {
readin(L);readin(R);
int now = L, ans = 1;
while( next[now] != 0 && next[now] <= R ) now = next[now], ans++;
printf( "%d\n", ans );
}
這與題目的性質有著極大的關系。**lmy說,這叫跳躍表。但是,考試時我打的有小問題,便WA完了。**
我大概沒有權力來講第三題。
Seqmod是有序鏈剖,當時丁神講過。當時並不覺得有多稀奇,但**lmy說,idy002當時做BZOJ3999時,想了很久,始終認為鏈剖必須有序,便開創了一種新算法。**
確實,網上查不到**有序鏈剖 **。而它與“無序鏈剖”最大的區別即是不用swap。在普通鏈剖中,swap是處理深度不同時的“必要”措施,但在此題下,一切都必須有序。我們需要引入更多特判,但思路依舊很清晰。*
**考場上,沒能打出來,便寫了DFS暴力,依舊30。所以,多看數據範圍是有好處的。**
總結20170317那一周