牛客演算法周周練15A 數列下標(單調棧)

2022-05-26 18:48:11 字數 1232 閱讀 1055

給出 n 個數,下標從 1 開始,依次輸出 ai 右邊第乙個比 ai 大的數的下標,如果沒有找到則輸出 0 。

思路一:列舉

列舉從 i 到 n 所有的數,找到則輸出第乙個,沒找到則輸出 0 ,複雜度是平方階的,範圍1e4 複雜度大概1e8,很容易被卡。ac**:

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n =

1e4+50;

int a[n]

;int

main()

if(flag)

cout <<

0<<

" ";

} cout << endl;

//system("pause");

return0;

}

思路二:單調棧模擬前面的方法複雜度過大,資料範圍再大一點就不行了,這種方法用單調棧模擬,用棧維護乙個不上公升的序列,只要 a[i] < 棧頂則把 i 進棧,如果遇到比棧頂大的數,則說明這個數是棧裡面的數要找的位置,棧內的數全部賦值 i ,然後 i 進棧,重新開始維護序列,讓棧裡面始終存不上公升的序列。ac**:

#include

#include

#include

#include

#include

using

namespace std;

const

int n =

1e4+50;

int a[n]

, ans[n]

;stack<

int> st;

intmain()

st.push

(i);

}for

(int i =

1; i <= n; i ++

) cout << ans[i]

<<

" ";

cout << endl;

return0;

}

牛客演算法周周練15

牛客演算法周周練15 題意很明確,再看看資料,所以我們直接兩重迴圈,用陣列b來記錄右邊第乙個大的數的下標 include typedef long long ll using namespace std ll a 10004 ll b 10004 intmain for int i 1 i n i ...

牛客演算法周周練2

a 題意 求乙個數的順序和逆序之和。題解 其實就是個閹割版的高精度加法嘛。其實逆序數忽略前導零這個條件是沒有用的,因為順序數不可能有前導零,自然結果也不會有,然後注意下首位進製不取餘。include using namespace std int a 10 b 10 intmain for k j ...

牛客演算法周周練2

題目鏈結 include define sc x scanf lld x define pf printf define rep i,s,e for int i s i e i define dep i,e,s for int i e i s i using namespace std typede...