暑假集訓日記 7 14(ST表)

2021-09-25 06:18:43 字數 3548 閱讀 3368

高階資料結構(2)、st表

一維:

#include

using namespace std;

const

int maxn=

1e5+7;

int st[maxn][20

],a[maxn]

,n;void

init

(int n)

intquery

(int l,

int r)

intmain()

return0;

}

二維:

#include

using namespace std;

const

int maxn=

1e5+7;

int st1[

251]

[251][

20],st2[

251]

[251][

20],a[251][

251]

,n;///st[i][j][k] 在(i,j)處,長度為2^k的矩形

void

init

(int n)

intquery1

(int l,

int r,

int k)

intquery2

(int l,

int r,

int k)

intmain()

a - balanced lineup

題解:(st表裸題)

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e5+7;

int st[maxn][20

],st1[maxn][20

],a[maxn]

,n,m;

void

init

(int n)

intquery

(int l,

int r)

intmain()

return0;

}

c - frequent values

題意:給你乙個大小為n的非遞減整型陣列,有q次查詢,問[l,r]**現次數最多的數出現的次數

題解:注意左端點需要單獨處理,不滿足字首和!!!!

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e6+7;

int st[maxn][50

],st1[maxn][50

],a[maxn]

,n,m;

int f[maxn]

;void

init

(int n)

intquery

(int l,

int r)

intmain()

}}

f - cornfields

題解:二維st表裸題

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e5+7;

int st1[

251]

[251][

20],st2[

251]

[251][

20],a[251][

251]

;///st[i][j][k] 在(i,j)處,長度為2^k的矩形

void

init

(int n)

intquery1

(int l,

int r,

int k)

intquery2

(int l,

int r,

int k)

intmain()

return0;

}

d - a magic lamp

題意:給定一串數字,取走m個元素,使得剩下的數字按原來順序組合在一起得到的數字最小。

題解:我們可以把題目轉化為這樣乙個模型:從a[1]、a[2]、……、a[n] n個數中選出n-m個數,使得組成的數最小。

一、使用rmq,設原數字長為n,那麼除去m個數字後還剩n-m個數字。

(1)因為有n-m個數字,那麼在1到m+1位置中最小的那個數字必是結果中的第乙個數字,記錄其位置為pos

(2)然後從這個位置的下個位置pos+1開始到m+2位置的數字中最小的那個數字必定是結果中第二個數字,以此類推下去向後找。

(3)為了保證數字最小,所以要保證高位最小,還要保證數字長度滿足條件

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

const

int maxn=

1e5+7;

int st[maxn][20

],a[maxn]

,n;string str;

intmain()

a[sum++

]=str[temp]

-'0'

; n++

; t=temp+1;

}int ans=-1

,flag=0;

for(

int i=

0;iif(flag==0)

cout<<

0

}}

暑假集訓日記Day xx

6.23 今天算是第一天吧 畢竟昨天被迫做了半天苦力 充實而豐滿的一天 上午做題 下午講題 晚上改錯 考試是原題和我會做有什麼關係嗎 早起跑操還闊以 比之前距離短就很快樂 然後練了會兒 就去吃早飯了 我好像飯量小了!晚上發現然並卵 上午就是考試唄 考試有啥好說的 考試沒啥好說的 那我在幹嘛呢 你在懷...

暑假集訓日記 8 2 搜尋

今天又是刷了一天的題。到現在腦子暈暈乎乎的。一直在乙個題上糾結。懷疑自己是不是讀錯題意了。在這個題上wa到瘋。感覺不是一道難題怎麼會這樣。我得再研究研究。總的來說今天上午有一道三維陣列的題。三維陣列的題沒有印象做過了。但是一看就想用三維陣列。乙個比較簡單的搜尋,一次就成功了。可是在輸出格式上一直錯的...

暑假集訓日記 8 5(博弈)

這是一篇沒有看完的部落格 im part ialc ombi nato rial game s 以 下簡稱i cg impartial combinatorial games 以下簡稱icg impar tial comb inat oria lgam es 以下簡稱 icg 滿足以下條件的遊戲是i...