bzoj 3401: [Usaco2009 Mar]Look Up 仰望

来源:互联网 发布:地砖 铺装 软件 编辑:程序博客网 时间:2024/03/29 17:47

→题目链接←


以高度为第一关键字,从大到小

以序号为第二关键字,从小到大

排序

然后从头开始扫,每次找到后继就是第一个高于他的,然后把他的编号插到set里


代码:

#include<iostream>#include<cstdio>#include<algorithm>#include<set>using namespace std;struct node{int x,num;friend bool operator < (node a,node b){if(a.num==b.num)return a.x<b.x;return a.num>b.num;}};int n;node a[100010];int ans[100010];set<int>s;set<int>::iterator r;int main(){scanf("%d",&n);for(int i=0; i<n; i++){scanf("%d",&a[i].num);a[i].x=i;}sort(a,a+n);for(int i=0; i<n; i++){r=s.upper_bound(a[i].x);if(r==s.end())ans[a[i].x]=0;else ans[a[i].x]=*r+1;s.insert(a[i].x);}for(int i=0; i<n; i++){printf("%d\n",ans[i]);}return 0;}


原创粉丝点击