ぐってぃのプログラミング日記

競技プログラミングやIT関係の記事を書いていくよ

C - 座圧

問題

atcoder.jp

考察

入力されるaを小さいもの順に並べる。
mapを使うことで、その数字が配列の中で何番目の大きさかを判定してあげればよき。

実装

#include <iostream>
#include <map>
#include <algorithm>
#include <vector>

#define ll long long

using namespace std;
ll l = 1000000007;
vector <ll> a[100050] = {};
vector <ll> b[100050] = {};

int main()
{
	map<ll, ll> mp;
	ll n;
	cin >> n;
	for (ll i = 0; i < n; i++)
	{
		ll x;
		cin >> x;
		a->push_back(x);
		b->push_back(x);
	}

	sort(b->begin(), b->end());
	b->erase(unique(b->begin(), b->end()), b->end());

	for (ll i = 0; i < b->size(); i++)
	{
		mp[b->at(i)] = i;
	}

	for (ll i = 0; i < n; i++)
	{
		cout << mp[a->at(i)] << endl;
	}
}