結果
問題 |
No.2930 Larger Mex
|
ユーザー |
👑 |
提出日時 | 2024-09-13 16:31:26 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,380 bytes |
コンパイル時間 | 1,073 ms |
コンパイル使用メモリ | 97,244 KB |
実行使用メモリ | 13,640 KB |
最終ジャッジ日時 | 2024-10-12 06:39:35 |
合計ジャッジ時間 | 20,910 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 2 |
other | AC * 20 WA * 15 TLE * 1 -- * 14 |
ソースコード
// Generated by ChatGPT o1-preview #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; cin >> N >> M; vector<int> A(N + 1); for (int i = 1; i <= N; ++i) { cin >> A[i]; } vector<int> last_occurrence(M, 0); // 0-based indexing vector<int> len(N + 1, 0); int l_i = 0; for (int i = 1; i <= N; ++i) { if (A[i] < M) { last_occurrence[A[i]] = i; } int max_last = 0; bool all_present = true; for (int j = 0; j < M; ++j) { if (last_occurrence[j] == 0) { all_present = false; break; } max_last = max(max_last, last_occurrence[j]); } if (all_present) { l_i = max_last; len[i] = i - l_i + 1; } else { len[i] = 0; // Cannot form a valid subarray ending at i } } vector<int> cnt(N + 2, 0); // cnt[k] for (int i = 1; i <= N; ++i) { if (len[i] > 0) { int k = min(len[i], i); cnt[k]++; } } vector<long long> ans(N + 2, 0); for (int k = N; k >= 1; --k) { ans[k] = ans[k + 1] + cnt[k]; } for (int k = 1; k <= N; ++k) { cout << ans[k] << "\n"; } return 0; }