map の練習問題!
問題概要
長さ の数列
が与えられる。
各 について、
かつ
を満たす最大の整数
を求めよ(存在しない場合は -1)。
制約
考えたこと
基本的には次の情報を管理できる配列が欲しい。
last[v]:その時点で、 を満たす最大の
ただし、 という制約を考えると、単純な配列だと
ものサイズが必要になってしまう。このようなとき、連想配列が活躍する。連想配列は、配列の添字にさまざまな要素を入れられるようにしたものである。C++ では
map 型が使える。
具体的には、map<int,int> 型の変数 last を用意しよう。全体として計算量は となる。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, A; cin >> N; map<int, int> last; for (int i = 0; i < N; i++) { cin >> A; if (!last.count(A)) cout << -1 << " "; else cout << last[A] << " "; last[A] = i+1; } cout << endl; }