A - Find Takahashi Editorial by kyopro_friends

値と添字の組をソートする解法

この問題は(値,添字)の組の配列をソートすることで解くことができます。

例えば、サンブルの \(A=(50,80,70)\) であれば、まず (値,添字) の組たち \((50,1),(80,2),(70,3)\) を要素に持つ配列を用意します。これをソートすると \((50,1),(70,3),(80,2)\) に並び替えられ、末尾に (最も大きな値,添字) の組を見つけることができます。

タプル(ペア)の比較が定義されている言語では、多くの場合、辞書順にソートされます。すなわち、1番目の要素の昇順にソートし、1番目の要素が同じもの同士は2番目の要素の昇順にソートし、……となります。

実装例(C++)

#include<bits/stdc++.h>
using namespace std;

int main(){
	int n;
	cin >> n;
	vector<int>a(n);
	for(int i=0;i<n;i++)cin >> a[i];
	vector<pair<int,int>>b(n);
	for(int i=0;i<n;i++)b[i]={a[i],i+1};
	sort(b.begin(),b.end());
	cout << b.back().second << endl;
}

実装例(Python)

N=int(input())
A=list(map(int,input().split()))
B=[(a,i+1) for i,a in enumerate(A)]
B.sort()
print(B[-1][1])

posted:
last update: