羅区CF670Cシネマ
説明
- 重要な柯の科学者が組織n個の異なる国がモスクワでの国際会議に参加していて、各柯の科学者たちは、唯一の言語です。利便性のために、私たちは1から10 ^ 9に番号を記述するための言語を指定します。
夕方には会議の後、柯の科学者たちは映画を見に行くことにしました。彼らはそこには、mは映画館に行って、すべてのフィールドは、言語や字幕言語の音声を表す2つの異なる番号があります。科学者は、柯ダブを理解することができれば、彼は非常に快適になります。私たちは、字幕を読むことができるならば、彼はもっと満足するでしょう。両者が理解できませんでした読み取ることができない場合は、彼は非常に怒っているだろう。
柯の科学者が映画に行くことにした人々との最も快適な前提の下で、人々は、最も満足するように、あなたは、彼らが映画を選ぶ手助けする必要があります。
入力
- 入力フォーマット:整数nの最初の行(1≤n≤200000)Keが科学者の数を表します。
第二のラインnの整数A1は、A2、...、( 1≤ai≤109)はけの科学者がする言語を表します。
三行目は、映画1≤m≤200000整数を表します。
第m行整数B1、B2、...、BN( 1≤bj≤109)は言語に映画の音を表します。
5行目のmは整数C1、C2、...、CN( 1≤cj≤109) 字幕付き表現言語の映画。
出力
- 出力フォーマット:整数表現の手配映画。複数の例がある場合は、プログラムの出力でより多くの満足を選択します。
サンプル入力
3 2 3 2 2 3 2 2 3
サンプル出力
2
ソリューション:
- 離散。
- フィルムがintの範囲の数ができるが発現したが、大きなアレイINT_MAXを開くことが不可能。だから我々は、被写体を観察し続け、データをm * 2つの+ n個の言語の最大に表示されることがわかった、60ワット最大の種である、配列を開くことができます。その後、各言語の人々の数をカウントして、タイトルを選択するために、離散、直接バケットはフィルムの要件を満たすことを意図しています。
#include <iostream>
#include <cstdio>
#include <algorithm>
#define N 400005
using namespace std;
struct Obj {int x, y, z;} obj[N];
int n, m, cnt;
int a[N], b[N * 3], c[N * 3], d[N * 3];
int read()
{
int x = 0; char c = getchar();
while(c < '0' || c > '9') c = getchar();
while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();}
return x;
}
int find(int x) {
return lower_bound(b + 1, b + 1 + cnt, x) - b;
}
bool cmp(Obj u, Obj v)
{
if(u.x == v.x)
{
if(u.y == v.y) return u.z < v.z;
else return u.y > v.y;
}
else return u.x > v.x;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; i++) a[i] = read(), b[++cnt] = a[i];
cin >> m;
for(int i = 1; i <= m; i++) obj[i].x = read(), b[++cnt] = obj[i].x, obj[i].z = i;
for(int i = 1; i <= m; i++) obj[i].y = read(), b[++cnt] = obj[i].y;
sort(b + 1, b + 1 + cnt);
cnt = unique(b + 1, b + 1 + cnt) - b - 1;
for(int i = 1; i <= n; i++)
c[find(a[i])]++, d[find(a[i])]++;
for(int i = 1; i <= m; i++) obj[i].x = c[find(obj[i].x)], obj[i].y = d[find(obj[i].y)];
sort(obj + 1, obj + 1 + m, cmp);
cout << obj[1].z;
return 0;
}