Codeforces 670C (離散化入門題)

2022-01-10 08:07:31 字數 1247 閱讀 3226

題目大意:

有 n 個人,每人會且僅會一種語言. (n ≤ 2e5)

語言有各自的編號(≤ 1e9)

這些人去看電影,一共有 m 種電影. (m ≤ 2e5)

每個電影的聲音與字幕語言都不一樣.

若有人的語言與聲音語言一樣,則稱這個人很高興♂.

若有人的語言與字幕語言一樣,則稱這個人比較高興.

現讓你選擇一場電影,使得此電影中,很高興的人最多,在此條件下,再使比較高興的人最多.

分析:因為要統計每種語言的人數,而語言編號 ≤ 1e9,存不下.

所以考慮離散化.

可得離散化之後,語言總數最多 n + 2m 種.

ac**:

#include#define inf 0x3f3f3f3f

using namespace std;

const int maxn = 2e5 + 5;

int n, m;

int a[maxn], b[maxn], c[maxn];

int sum[maxn * 3];

int cnt, mm;

int arr[maxn * 3], num[maxn * 3];

void discrete()

}int query(int x)

int main()

scanf("%d", &m);

for (int i = 1; i <= m; i++)

for (int i = 1; i <= m; i++)

discrete();//離散化

for (int i = 1; i <= n; i++)

int bmax = -1, cmax = -1, ans = 0;

for (int i = 1; i <= m; i++)

else }}

printf("%d\n", ans);

return 0;

}

暴力解法:670ms

#includeusing namespace std;

typedef pairpii;

int n, m;

int a[20000005];

mapmp;

int main()

for (int i = 1,b; i <= m; ++i)

cout << k << endl;

}

Codeforces 587C 樹上倍增

題意 求樹上兩點路徑中的前 a 10 小的點權值。思路 類似lca倍增演算法來儲存 i 2 j 路上的 前 10 小個 的點權值。然後要寫乙個權值合併 具體求 u v 的話,就是先分別計算 和 減1是lca會重疊 然後再合併,輸出答案。include include include include ...

Codeforces 976C 題解報告

對資料進行排序 1 按左邊的數從小到大排 2 若左邊的數相等,則按右邊的數從大到小排。排序之後,若乙個數的右邊的數小於等於上乙個數的右邊的數,則這兩個數必然符合題意。比如2 13 2 12 1 11排序之後,變為 1 11 2 13 2 12因為12 13,則有 2,12 被包含在它的上乙個數 2,...

CodeForces 948C 解題報告

題目鏈結 這道題看出來了是一道stl題,本來一開始用佇列去做,結果tle,在這裡先給出tle include using namespace std typedef long long ll const int maxn 1e5 10 int n,v maxn t maxn int main els...