NOI導刊2010提高(06) 黑匣子

2022-05-01 05:30:10 字數 1545 閱讀 6823

black box是一種原始的資料庫。它可以儲存乙個整數陣列,還有乙個特別的變數i。最開始的時候black box是空的.而i等於0。這個black box要處理一串命令。

命令只有兩種:

add(x):把x元素放進blackbox;

get:i加1,然後輸出blackhox中第i小的數。

記住:第i小的數,就是black box裡的數的按從小到大的順序排序後的第i個元素。例如:

我們來演示一下乙個有11個命令的命令串。(如下圖所示)

現在要求找出對於給定的命令串的最好的處理方法。add和get命令分別最多200000個。現在用兩個整數陣列來表示命令串:

1.a(1),a(2),…a(m):一串將要被放進black box的元素。每個數都是絕對值不超過2000000000的整數,m$200000。例如上面的例子就是a=(3,1,一4,2,8,-1000,2)。

2.u(1),u(2),…u(n):表示第u(j)個元素被放進了black box裡後就出現乙個get命令。例如上面的例子中u=(l,2,6,6)。輸入資料不用判錯。

輸入格式:

第一行,兩個整數,m,n。

第二行,m個整數,表示a(l)

……a(m)。

第三行,n個整數,表示u(l)

…u(n)。

輸出格式:

輸出black box根據命令串所得出的輸出串,乙個數字一行。

輸入樣例#1:複製

7 4

3 1 -4 2 8 -1000 2

1 2 6 6

輸出樣例#1:複製

331

2

對於30%的資料,m≤10000;

對於50%的資料,m≤100000:

對於100%的資料,m≤200000。

平衡樹;

1 #include2 #include3

const

int maxn=2e5+10;4

intrt,ts;

5int

t[maxn],sz[maxn],num[maxn];

6int f[maxn],s[maxn][2];7

void rot(int

x)16

void splay(int

x)25}26

}27void ins(int k,int

x)35

splay(k);36}

37void del(int k,int

x)46}47

int search(int k,int

x)52

int n,m,x,y=1,ans=1;53

intp[maxn];

54int

main()

63return0;

64 }

黑匣子 NOI導刊2010提高(06)

題目描述 black box是一種原始的資料庫。它可以儲存乙個整數陣列,還有乙個特別的變數i。最開始的時候black box是空的 而i等於0。這個black box要處理一串命令。命令只有兩種 add x 把x元素放進blackbox get i加1,然後輸出blackhox中第i小的數。記住 第...

黑匣子 NOI導刊2010提高(06) 題解

題目大意 一開始你有乙個空的陣列,有m個操作,有兩種操作,一種是往陣列裡加乙個數,另一種是先讓i 然後讓你輸出陣列中第i小的數,i從0開始。對於這道題,我們需要開兩個堆,乙個堆維護1 i內的數,維護成大根堆,乙個堆維護剩下的數 i 1 n 維護成小根堆 這裡的1 i和i 1 n是指將陣列裡的數 那這...

P1799 數列 NOI導刊2010提高(06)

這道題就是求通過刪除數字得到乙個新序列,從而與 1,2,3,4,序列所能形成最多的匹配。在題解翻到了兩種做法 傳統dp 設 dp i j 為從原序列中的前 i 位取 j 個數所能形成的最多匹配。注意 匹配的條件是 a i j 因為我們求的是新序列,新序列中第 j 位所期望的數字就是 j 如果成立,那...