首页 > 其他 > 详细

uoj278 【UTR #2】题目排列顺序

时间:2019-09-06 23:00:29      阅读:132      评论:0      收藏:0      [点我收藏+]

题目

读进来\(f\)之后,把权值作为第一关键字从小到大排序,位置作为第二关键字从大到小排序,这样排序后的第\(i\)个位对应的位置就应该填数字\(i\)

权值作为第一关键字,保证了出现在其之前的数权值必它小的填的数也比它小,权值必它大的填的数也比它大;权值相同时按照位置从大到小排序,这样权值相同的一组就是递减的,就不会相互影响了

代码

#include<bits/stdc++.h>
#define re register
inline int read() {
    char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar();
    while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=1e5+5;
int n,b[maxn];
struct N{int v,p;}a[maxn];
inline int cmp(N A,N B) {return A.v==B.v?A.p>B.p:A.v<B.v;}
int main() {
    n=read();
    for(re int i=1;i<=n;i++) a[i].v=read(),a[i].p=i;
    std::sort(a+1,a+n+1,cmp);
    for(re int i=1;i<=n;i++) b[a[i].p]=i;
    for(re int i=1;i<=n;++i) printf("%d ",b[i]);puts("");
    return 0;
}

uoj278 【UTR #2】题目排列顺序

原文:https://www.cnblogs.com/asuldb/p/11478428.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!