結果
問題 | No.2930 Larger Mex |
ユーザー | loop0919 |
提出日時 | 2024-09-13 16:47:32 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,426 bytes |
コンパイル時間 | 944 ms |
コンパイル使用メモリ | 99,984 KB |
実行使用メモリ | 10,112 KB |
最終ジャッジ日時 | 2024-10-12 06:39:39 |
合計ジャッジ時間 | 5,208 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 2 |
other | AC * 30 WA * 20 |
ソースコード
// Generated by ChatGPT o1-preview (TLEを指摘ver) #include <iostream> #include <vector> #include <map> using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N, M; cin >> N >> M; vector<int> A(N); for (int &x : A) cin >> x; if (M == 0) { // 全ての部分列が条件を満たす for (int k = 1; k <= N; ++k) { cout << N - k + 1 << "\n"; } return 0; } vector<int> ans(N + 1, 0); vector<int> count(M, 0); int total = 0; int left = 0; // 各長さの部分列の数をカウントするためのマップ map<int, int> length_count; for (int right = 0; right < N; ++right) { if (A[right] < M) { if (count[A[right]] == 0) total++; count[A[right]]++; } while (total == M) { // 部分列の長さを計算 int len = right - left + 1; if (len <= N) { length_count[len]++; } if (A[left] < M) { count[A[left]]--; if (count[A[left]] == 0) total--; } left++; } } // 累積的にカウントを集計 for (auto &[len, cnt] : length_count) { ans[len] += cnt; } for (int k = 1; k <= N; ++k) { ans[k] += ans[k - 1]; cout << ans[k] << "\n"; } return 0; }