原題鏈結
樣例輸入
2
7 3
4 2 2 1 1 1 2
4 31 1 1 2
樣例輸出5
1
思路
一定存在乙個最高的高樓,這個高度一定是最後的高度,那麼我們最先相出的做法就是,找到這個高樓的位置,然後在其兩邊一直加知道所有的樓都相同,但是這麼寫特別麻煩,甚至不可寫。
對於這種區間操作的問題,我們可以考慮差分,對於差分陣列,其中可能會有三種情況 \(> 0 \quad < 0 \quad = 0\) ,對於 \(= 0\) 的情況我們可以忽略。那麼只剩下 \(< 0 \quad > 0\),我們先考慮 \(> 0\)的,假設\(a_i > 0\)因為我們只能對連續m個高樓執行+1
的操作,那麼我們需要將 \([i-m,i)\)的區間內都加\(a_i\),這樣可以讓i-1
的高樓和i
一致。對於 \(< 0\) 的同理,我們正向做即可。
code
#include using namespace std;
using ll = long long;
const int n = 1e5 + 1;
int a[n];
inline void solve()
for(int i = 2; i + m - 1 <= n; i ++ ) if(a[i] < 0)
for(int i = 2; i <= n; i ++ ) if(a[i] != 0)
cout << ret << "\n";
}int main()
zoj 2900 DP(線段樹優化)
同樣是暴力,別人能過,我不能過,生活有的時候就是這麼無奈。dp i j k 表示前i個數取j個,最後一和是k的個數 然後改變dp順序可以將三維變為2維 注意下一下細節的地方。不然這樣暴力dp會超時 還有一種就是用線段樹來優化。優化到3770ms。不優化是6000 ms。有一點要注意的就是不能乙個都沒...
BZOJ2900 好玩的數字遊戲
好玩的數字遊戲 多組資料。每個測試點的資料組數不超過1000組。每一行僅乙個正整數n。保證沒有多餘的什麼奇怪的字元。每個測試點的資料最後一行一定是數字0。代表這個測試點的結束。對於每組資料,輸出相應的結果。大部分方法都是數字dp 我感到對奇偶性的分析不是很清晰 於是聽到了czt的做法 對於乙個k位長...
zzuli 1858 單詞翻轉
time limit 1 sec memory limit 128 mb submit 254 solved 141 submit status web board 在朋友的信裡變成了 yppah 請你編寫程式幫助小明還原來信內容吧。輸入乙個字串,以回車結束。該字串長度不超過100 包含多個單詞,單...