1. 程式人生 > >總結20170317那一周

總結20170317那一周

前綴 模擬 求逆 cnblogs width 問題 idt tro 同時

  這是筆者當時的總結,部分東西過於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那一周