[C++]規格1015:数列ソート


#include <iostream>
#include <utility> // pair
#include <algorithm> // sort
#include <vector>
using namespace std;

int N, x;
vector<pair<int, int> > sv;
int main(int argc, char** argv){
  scanf("%d", &N);

  for(int i=0; i<N; i++){
    scanf("%d", &x);
    sv.push_back(make_pair(x, i)); // 값, 인덱스 - 원래 순서 기억
  }

  sort(sv.begin(), sv.end()); // 값 기준 정렬

  vector<int> v(N);
  for(int i=0; i<N; i++){
    v[sv[i].second] = i; // 정렬된 인덱스 할당
  }

  for(int i=0; i<N; i++){
    printf("%d ", v[i]);
  }

  return 0;
}
自分の考えを実現するのはかなり難しい問題だ.
  • は、まずpairを使用してインデックスを記録し、svベクトルに元の順序を記憶する.
  • はsort関数によってsvベクトルをソートする.
  • ソート後のsvベクトルのインデックスは、返される値を必要とするため、新しいvベクトルでは、svベクトルのインデックス値(元の順序)に新しいソートインデックスが記録される.
  • vベクトル値を出力します.
  • 3番はなかなか思いつかない一つ一つ比較すると、印刷値があまりにも効率的ではないかもしれませんが、私は悩んでいますが、もっと異なる方法を考えるのはいつも難しいです.