NC217242. ACM基地招新大会
描述
输入描述
第一行包括一个整数,代表参加基地招新面试的人数
第二行包括个整数,第个代表第一个人的能力值
输出描述
输出包括行,每行一个整数,第行的数代表原队列的第个人最终能排在第个位置,下标从1开始
示例1
输入:
7 3 1 4 5 6 2 8
输出:
1 1 1 1 1 5 1
C++(clang++11) 解法, 执行用时: 302ms, 内存消耗: 6824K, 提交时间: 2021-01-16 23:06:20
#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; const int inf=0x3f3f3f3f; stack<int>s; int a[maxn]; int ans[maxn]; map<int,int>l; int main(){ a[0]=inf; s.push(0); int n; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; while(a[s.top()]<=a[i])s.pop(); l[i]=s.top(); if(l[i]==0){ cout<<1<<endl; ans[i]=1; } else{ int k; if(a[i]>=a[i-1]&&l[i]==l[i-1])k=ans[i-1]-1; else k=l[i]-1; while(a[k]<=a[i])k--; cout<<k+1<<endl; ans[i]=k+1; } s.push(i); } }