結果
問題 |
No.3269 Leq-K Partition
|
ユーザー |
![]() |
提出日時 | 2025-09-12 21:56:04 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 745 ms / 6,000 ms |
コード長 | 1,200 bytes |
コンパイル時間 | 4,054 ms |
コンパイル使用メモリ | 259,564 KB |
実行使用メモリ | 21,816 KB |
最終ジャッジ日時 | 2025-09-12 23:38:40 |
合計ジャッジ時間 | 16,512 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#include <stdio.h> #include <atcoder/all> #include <bits/stdc++.h> using namespace std; using namespace atcoder; using mint = modint998244353; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf32 1000000005 #define Inf64 1000000000000000001LL int op(int a,int b){ return max(a,b); } int e(){ return 0; } int mapping(int a,int b){ return a+b; } int composition(int a,int b){ return a+b; } int id(){ return 0; } int X; bool f(int x){ return x < X; } int main(){ int n; cin>>n; vector<int> a(n); vector<vector<int>> is(n); rep(i,n){ cin>>a[i]; a[i]--; is[a[i]].push_back(i); } lazy_segtree<int,op,e,int,mapping,composition,id> seg(n); vector<vector<int>> qs(n); vector<int> ans(n); { set<int> s; rep(i,n){ s.insert(a[i]); seg.set(i,s.size()); qs[0].push_back(i); } } rep(i,n){ rep(j,qs[i].size()){ int id = qs[i][j]; ans[id]++; X = id + 2; int rr = seg.max_right<f>(id); if(rr<n){ qs[rr].push_back(id); } } int d = distance(is[a[i]].begin(),lower_bound(is[a[i]].begin(),is[a[i]].end(),i)); seg.apply(d,n,-1); if(d+1!=is[a[i]].size()){ d++; seg.apply(is[a[i]][d],n,1); } } rep(i,n){ cout<<ans[i]<<endl; } }