单调栈
【题目描述】
给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。
【输入格式】
第一行包含整数N,表示数列长度。
第二行包含N个整数,表示整数数列。
【输出格式】
共一行,包含N个整数,其中第 i 个数表示第 i 个数的左边第一个比它小的数,如果不存在则输出 −1。
【数据范围】
1≤N≤105
1≤数列中元素≤109
【输入样例】
5
3 4 2 7 5
【输出样例】
-1 3 -1 2 2
1 #include <iostream> 2 #include <stack> 3 using namespace std; 4 stack<int> s; 5 int n; 6 int main() 7 { 8 cin >> n; 9 for(int i = 0;i < n;++i) 10 { 11 int num; 12 cin >> num; 13 while(s.size() && s.top() >= num) 14 s.pop(); 15 if(!s.size()) 16 cout << -1 << " "; 17 else 18 cout << s.top() << " "; 19 s.push(num); 20 } 21 return 0; 22 }

浙公网安备 33010602011771号