关于排序

学术版

捞一把(
by JinBridge @ 2020-10-28 22:10:58


@[JinBridge](/user/72764) 先离散化,分别找出a,b数组第几个数是第几大,然后对应着输出来 是这个意思么
by Mcggvc @ 2020-10-29 18:44:40


@[Mcggvc](/user/84066) 发现zzh大佬 是的( 可是怎么写啊
by JinBridge @ 2020-10-29 19:50:52


@[JinBridge](/user/72764) 用树状数组,如果一个数离散化之后是i,就在i的位置+1,然后再遍历一遍,对于一个数j,树状数组中j的前缀和+1就是j在这一串数中的排名 我菜菜
by Mcggvc @ 2020-10-29 20:20:49


@[Mcggvc](/user/84066) 啊这 怎么个离散法( 求个代码 另外你们啥时候集训(
by JinBridge @ 2020-10-29 20:41:23


@[JinBridge](/user/72764) 没消息,不知道
by Mcggvc @ 2020-10-29 23:41:38


@[JinBridge](/user/72764) 应该是这样吧,不知道有没有问题 ```cpp const int N = 1000; int a[N], b[N], n, fa[N], fb[N]; int main() { scanf("%d", &n); vector<int> tmp; for(int i = 1; i <= n; i++) { scanf("%d", &a[i]); tmp.push_back(a[i]); } sort(tmp.begin(), tmp.end()); unique(tmp.begin(), tmp.end()); for(int i = 1; i <= n; i++) { int p = a[i]; a[i] = lower_bound(tmp.begin(), tmp.end(), a[i]) - tmp.begin() + 1; fa[a[i]] = p; } tmp.clear(); for(int i = 1; i <= n; i++) { scanf("%d", &b[i]); tmp.push_back(b[i]); } sort(tmp.begin(), tmp.end()); unique(tmp.begin(), tmp.end()); for(int i = 1; i <= n; i++) { int p = b[i]; b[i] = lower_bound(tmp.begin(), tmp.end(), b[i]) - tmp.begin() + 1; fb[b[i]] = p; } for(int i = 1; i <= n; i++) { printf("%d ", fb[a[i]]); } return 0; } ```
by Mcggvc @ 2020-10-29 23:42:18


|