結果
| 問題 |
No.2930 Larger Mex
|
| コンテスト | |
| ユーザー |
momoyuu
|
| 提出日時 | 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;
}
}
momoyuu