給出 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...