結果
問題 |
No.2930 Larger Mex
|
ユーザー |
![]() |
提出日時 | 2024-10-13 18:34:46 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 265 ms / 2,000 ms |
コード長 | 1,143 bytes |
コンパイル時間 | 1,068 ms |
コンパイル使用メモリ | 97,352 KB |
実行使用メモリ | 6,784 KB |
最終ジャッジ日時 | 2024-10-13 18:35:03 |
合計ジャッジ時間 | 16,036 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 50 |
ソースコード
#include<iostream> #include<vector> #include<algorithm> using namespace std; using ll = long long; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll n,m; cin>>n>>m; vector<int> a(n); for(int i = 0;i<n;i++) cin>>a[i]; vector<int> cnt(3e5,0); int r = 0; vector<ll> ans(n+1,0); int now = m; auto add = [&](int p) { if(p>=m) return; //cout<<p<<" "<<cnt[p]<<endl; if(cnt[p]==0) now--; cnt[p]++; return; }; auto erase = [&](int p){ if(p>=m) return; if(cnt[p]==1) now++; cnt[p]--; }; for(int i = 0;i<n;i++){ while(r<=i) { add(a[r]); r++; } while(r<n){ if(now==0) break; //cout<<i<<" "<<r<<endl; add(a[r]); r++; } if(now==0) { int len = r - i; int mx = n - i; ans[len]++; if(mx+1<=n) ans[mx+1]--; } erase(a[i]); } for(int i = 1;i<=n;i++){ if(i!=n) ans[i+1] += ans[i]; cout<<ans[i]<<endl; } }