思路:正著去找的時候要先找到下面的-號再來確定上面的+的加號的內容而且連續的「-」的時候上面的要最小,有點類似棧。嘗試倒著思考。
從後往前,當前stack為空的時候或者當前棧頂元素》要入棧的元素的時候,該操作是合法的,那麼入棧。否則不合法。
當遇到+的時候,意味著有乙個元素要踢掉了,把踢掉的這個元素記錄下來。然後取出棧頂元素。
最後統一輸出。
這樣做的合法性:
倒序的時候就思考我們已經放好了所有足夠的空攤位。就看當前空攤位怎麼分配。
最後面進來的數要在其對應的區間內放。
比如-2
-3-1
-44要放在第4/3個+,1要放在4/3+,3放第1/2+,2放第1/2+。
也就是在取的數是合法的情況下,要放到能放得下的合法的攤位中。
#include#include#include#include#include#include#include#include#include#include#define debug(a) cout<<#a<<"="struct pshu[maxn];
int main(void)
else if(str=='-')
} for(ll i=2*n;i>=1;i--)
else if(shu[i].op=='+')
} else
cout
}
思維題 倒序差分的運用
筱瑪是乙個熱愛線段樹的好筱瑪。筱瑪的爺爺馬爺在遊戲中被筱瑪吊打了,於是他惱羞成怒,決定給筱瑪出這樣一道資料結構題 給定乙個長度為n nn的陣列a aa,剛開始每一項的值均為0 00。支援以下兩種操作,操作共m mm次 1 l r 1 l r1 l r 將al ar al aral ar的每一項的值加...
純C用棧實現倒序輸出字串
無聊看到csdn有人問用c言語用棧實現倒序輸出字串。示例中用空格作為字串的分隔符。include include define err value 1 引數錯誤 define err memory 2 記憶體錯誤 define ok 0 define true 1 define false 0 de...
利用乙個棧倒序另外乙個棧中的數
題目 有兩個相同的棧a和b,在棧a中存放著從大到小的數 1,2,3,4,5,棧頂為最小數1,另外乙個棧b為空的。現在要求不使用其他的資料結構,將棧a中的數字順序倒過來,使其棧頂的數為最大值5。include include include using namespace std template v...