大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,
(1) 對每個pop操作,我們記錄它之前一共有多少個push操作。
(2) 對每個pop操作,我們記錄這個被pop的元素曾經被壓上了幾個。
對於第二種記錄方式,上面壓的個數,即為該元素的push和pop操作之間,另外push和pop的元素個數。也就是說,如果該元素pop的操作序列號為x,上面壓了a個元素,那麼其push的操作序列號為 x-a*2-1。所以從後往前掃一遍就行了。
另外,要用stdio.h,cstdio會超時。
//#include#include#includeusing namespace std;
const int maxn=1000100;
int a[maxn],ans[maxn<<1];
void read(int&a)
inline void prin_d(int x)
putchar(x % 10 + '0');
return ;
}int main()
now=0;
for(i=1;i<=n+n;i++)
}printf("\n");
}}
51nod1403 有趣的堆疊
大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,我們記錄這個被pop的元素曾經被壓上了幾個。例如 操作push,push,pop...
51nod1403 有趣的堆疊
看成括號序列的話第二種方法其實就是左括號和右括號之間有多少對完整的括號。include include include includeusing namespace std define rep i,s,t for int i s i t i define dwn i,s,t for int i s...
1403 有趣的堆疊
1403 有趣的堆疊 基準時間限制 1 秒 空間限制 131072 kb 分值 大家都熟悉堆疊操作。乙個堆疊一般有兩種操作,push和pop。假設所有操作都是合法的並且最終堆疊為空。我們可以有很多方法記錄堆疊的操作,1 對每個pop操作,我們記錄它之前一共有多少個push操作。2 對每個pop操作,...