记录编号 164084 评测结果 AAAAAAAAAAAA
题目名称 [USACO Mar09] 向右看齐 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.252 s
提交时间 2015-05-28 07:48:55 内存使用 11.76 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
const int SIZEN=1000010;
int N;
int H[SIZEN],lis[SIZEN];
set<int> S;
int ans[SIZEN]={0};
bool cmp(int a,int b){
	return H[a]<H[b];
}
void work(void){
	sort(lis+1,lis+1+N,cmp);
	S.insert(N+1);
	int i=N,j=N;
	while(i>=1){
		if(i==N||H[lis[i]]!=H[lis[i+1]]){
			//lis[N+1]=0
			while(j>i) S.insert(lis[j--]);
		}
		int p=lis[i];
		int q=*S.upper_bound(p);
		if(q==N+1) q=0;
		ans[p]=q;
		i--;
	}
	for(int i=1;i<=N;i++) printf("%d\n",ans[i]);
}
void read(void){
	scanf("%d",&N);
	for(int i=1;i<=N;i++){
		scanf("%d",&H[i]);
		lis[i]=i;
	}
}
int main(){
	freopen("lookup.in","r",stdin);
	freopen("lookup.out","w",stdout);
	read();
	work();
	return 0;
}