torus711 のアレ

主に競技プログラミングの問題について書きます

Codeforces #149, Division 2, B : Big Segment

概要

n 個の区間が与えられる。
他の全ての区間を内包するような区間があれば、その番号を出力せよ。
存在しない場合は -1 を出力せよ。

解法

全区間の内で最小の値と最大の値を求める。
[ 最小値, 最大値 ] という区間が存在すればそれが答え。

本番で書いたコード

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	int n;
	cin >> n;

	VI ls( n ), rs ( n );

	REP( i, 0, n )
	{
		cin >> ls[i] >> rs[i];
	}

	int lb = *min_element( ALL( ls ) ), ub = *max_element( ALL( rs ) ), res = -1;

	REP( i, 0, n )
	{
		if ( lb == ls[i] && ub == rs[i] )
		{
			res = i + 1;
		}
	}

	cout << res << endl;

	return 0;
}