P2947
题目
题目描述:
约翰的 N(1≤N≤105) 头奶牛站成一排,奶牛 i 的身高是 Hi(1≤Hi≤106)。现在,每只奶牛都在向右看。对于奶牛 i,如果奶牛 j 满足 i<j 且 Hi<Hj,我们可以说奶牛 i 可以仰望奶牛 j。 求出每只奶牛离她最近的仰望对象。
输入格式:
第 1 行输入 N,之后 N 行第 i+1 行输入一个身高 Hi。
输出格式:
共 N 行,按顺序每行输出一只奶牛的最近仰望对象,如果没有仰望对象,输出 0。
数据范围与说明:
【输入说明】
6 头奶牛的身高分别为 3, 2, 6, 1, 1, 2。
【输出说明】
奶牛 1,2 仰望奶牛 3,奶牛 4,5 仰望奶牛 6,奶牛 3 和 6 没有仰望对象。
【数据规模】
对于 20% 的数据:1≤N≤10;
对于 50% 的数据:1≤N≤103;
对于 100% 的数据:1≤N≤105,1≤Hi≤106。
输入输出样例 #1
输入:
输出:
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include<bits/stdc++.h> using namespace std; int h[100001],ans[100001]; int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&h[i]); } stack<int> st; for(int i=n;i>=1;i--){ while(!st.empty()&&h[st.top()]<=h[i]){ st.pop(); } if(st.empty()){ ans[i]=0; }else{ ans[i]=st.top(); } st.push(i); } for(int i=1;i<=n;i++){ printf("%d\n",ans[i]); } return 0; }
|