剛開始有乙個空棧,我們可以對這個棧進行n次操作,每次操作之後返回棧中數字的最大值a[i],如果棧為空,那麼則返回0,即a[i] = 0。。怎樣對棧進行操作題目已經給出,需要求的是
直接模擬,剛開始隊友可能想到線段樹維護最大值
需要注意的是除了題目中描述的函式的變數型別不改為long long, 其他的變數型別全部變為long long
問題:需要思考的是pop的時候是怎麼維護最大值的?
答:用乙個pre陣列儲存當前棧中的最大值
如果操作是push,我們很容易可以想到pre[top] = max(st[top],pre[top - 1]);
如果操作時pop, 就把top–,pop之後的最大值就是pre[top];
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
#define case int t;scanf("%d", &t);while(t--)
#define pb push_back
typedef
long
long ll;
typedef
unsigned
long
long ull;
const
int maxn =
5e6+5;
const
int inf =
0x3f3f3f3f
;const
int mod =
1e9+7;
const
double pi =
acos(-
1.0);
ll a[maxn]
;ll st[maxn]
;ll pre[maxn]
;ll top =0;
ll ans =0;
ll n, p, q, m;
unsigned
int sa, sb, sc;
int tot;
unsigned
intrng61()
void
push
(unsigned
int x)
void
pop(
)void
gen(
)else
if(top ==0)
continue
; ans = ans ^
(i * pre[top]);
//答案求解}}
intmain()
return0;
}
基礎演算法 模擬
給乙個長度為n的陣列a,我們現在要選出乙個序列,要求就是這個序列的中位數最接近k,輸出最長的那個滿足要求的序列在陣列a中的下標 輸入 n和k,陣列a 輸出 最長的滿足要求的序列的長度len,以及下標 p1,p2,plen 1 pi n,pi pi 1 input 5 31 2 3 4 5 outpu...
基礎演算法 模擬 細節
1337 翻轉遊戲 例如 遊戲有兩關一共4盞燈,第一關levs為 第二關為 你需要5步完成這個遊戲,因為燈初始狀態為 5個步驟依次是 check,check。輸入多組測試資料,第一行乙個整數t,表示資料個數,其中1 t 10 之後有t組相同結構的資料 每組資料第一行包含兩個整數n,m,其中1 n,m...
基礎演算法模擬 例題 C
在漫長的刷題練習過程中,幾乎所有稍微熟練一點的oier都會,但是都幾乎沒有經過系統的學習,今天,我們就來講講模擬演算法,也是為了複習emm。定義?模擬還有什麼定義嗎?那什麼是模擬呢?就是按照題目給的操作,用 依次描述出來即可。noip會考嗎?會考!但是大家在刷題過程中一定會遇到這種題,其實只要看清是...