2019-07-28
AtCoder Beginner Contest 134 C
コード
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main() {
int N;
cin >> N;
int A[N];
int A_sort[N];
for (int i = 0; i < N; i++) {
cin >> A[i];
A_sort[i] = A[i];
}
sort(A_sort, A_sort + N);
for (int i = 0; i < N; i++) {
int ret;
if (A[i] == A_sort[N-1]) ret = A_sort[N-2];
else ret = A_sort[N-1];
cout << ret << endl;
}
}
学んだこと
- std::sort で実際にメモリ上の並び順が変わる。sort 前の順番を保持しておきたければ、コピーをつくって sort すること。
- 配列をまるごとコピーする専用の方法は特に用意されていないので、以下でやる。
- 1 要素ずつコピー。
- memcpy 関数でメモリ領域をまとめてコピー。
- 構造体のメンバとして配列をもたせて、構造体をコピーするとメンバもコピーされる。
#include <bits/stdc++.h>
は gcc で用意されており、標準ライブラリを一括 include できる。- が、mac でこれを使うのはちょっと面倒そうなのでやめておく。