基礎演算法 模擬

2021-10-14 07:44:02 字數 1652 閱讀 2830

剛開始有乙個空棧,我們可以對這個棧進行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會考嗎?會考!但是大家在刷題過程中一定會遇到這種題,其實只要看清是...