題目鏈結
題目描述
街上有n棵樹,標號為1…n,第i棵樹的高度為ai。
定義這n棵樹是漂亮的,當且僅當
1. 對於所有的i,ai=an-i+1;
2. 對於1 <= i < n / 2 (不是整除),ai + 1= ai + 1;
比如說 「2 3 4 5 5 4 3 2」和「1 2 3 2 1」是漂亮的而「1 3 3 1」和「1 2 3 1」不是。
現在請問最少修改幾棵樹的高度(可以變大也可以變小),使得這些樹是漂亮的。
輸入描述:
第一行乙個整數n表示樹的數量( 1 <= n <= 100,000)。輸出描述:第二行n個整數表示樹的高度( 1 <= ai <= 100,000)。
輸出乙個整數表示最少修改樹的高度的數目。示例1
輸入
3
2 2 2
輸出
1
示例2
輸入
4
1 2 2 1
輸出
0
考慮三個序列:
從a變成b不是很好想,不妨先找乙個輔助序列c,把a
i 和c
i 做差,差值相同的a
i 一定都屬於某乙個正確序列,那麼把a
i按差值分類,就相當於把含有這些a
i 的正確序列按差值分類。只需要找到含有a
i 最多正確序列就行了,答案就是n減去它含有的a
i 個數。
#include
int n;
int arr[100005];
int f[100005];
//開乙個下標可以為負數的陣列
int data[200010] = ;
int* cnt= data+100005;
int main()
printf("%d",ans);
}
B樹 B 樹 B 樹 B 樹的區別
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...
B樹 B 樹 B 樹 B 樹的區別
即二叉查詢樹 二叉排序樹或二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比...
B樹 B 樹 B 樹 B 樹之間的關係
b樹 b tree樹即b樹,b即balanced,平衡的意思。因為b樹的原英文名稱為b tree,而國內很多人喜歡把b tree譯作b 樹,其實,這是個非常不好的直譯,很容易讓人產生誤解。如人們可能會以為b 樹是一種樹,而b樹又是另一種樹。而事實上是,b tree就是指的b樹。特此說明。先介紹下二叉...