Submission #63846500
Source Code Expand
// Problem: F - Variety Split Hard
// Contest: AtCoder - OMRON Corporation Programming Contest 2025 (AtCoder Beginner Contest 397)
// URL: https://atcoder.jp/contests/abc397/tasks/abc397_f
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
//
// Powered by CP Editor (https://cpeditor.org)
//空中散歩の SOS 僕ファー 僕ファー 僕ファー ~
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef double db;
const ll maxn=3e5+5;
struct sgt{
#define mid ((l+r)>>1)
#define ls (x<<1)
#define rs (x<<1|1)
ll t[maxn<<2],g[maxn<<2];
void upd(ll x){
t[x]=max(t[ls],t[rs]);
}
void push_down(ll x,ll l,ll r){
t[ls]+=g[x];
t[rs]+=g[x];
g[ls]+=g[x];
g[rs]+=g[x];
g[x]=0;
}
void clear(ll x,ll l,ll r){
if(l==r){
t[x]=0;
g[x]=0;
return ;
}
clear(ls,l,mid);
clear(rs,mid+1,r);
upd(x);
return ;
}
void modify(ll x,ll l,ll r,ll L,ll R,ll val){
if(L<=l&&r<=R){
g[x]+=val;
t[x]+=val;
return ;
}
push_down(x,l,r);
if(L<=mid)modify(ls,l,mid,L,R,val);
if(R>mid)modify(rs,mid+1,r,L,R,val);
upd(x);
return ;
}
ll query(ll x,ll l,ll r,ll L,ll R){
if(L<=l&&r<=R){
return t[x];
}
push_down(x,l,r);
ll res=0;
if(L<=mid)res=max(res,query(ls,l,mid,L,R));
if(R>mid)res=max(res,query(rs,mid+1,r,L,R));
return res;
}
}t;
vector<ll>lst[maxn];
ll a[maxn];
ll n,ans;
ll b[maxn];
void solve(){
cin>>n;
ll res=0;
for(ll i=1;i<=n;i++){
cin>>a[i];
if(lst[a[i]].empty())res++;
lst[a[i]].push_back(i);
}
for(ll i=1;i<=n;i++){
if(lst[i].size()>1){
t.modify(1,1,n,*lst[i].begin(),lst[i].back()-1,1);
}
}
ans=res;
// cerr<<n+1<<" "<<res<<endl;
for(ll i=n;i>1;i--){
if(!b[a[i]])res++;
b[a[i]]++;
if(lst[a[i]].size()<=0){
ans=max(ans,res+t.query(1,1,n,1,i-1));
// cerr<<i<<" "<<res+t.query(1,1,n,1,i-1)<<endl;
continue;
}
else if(lst[a[i]].size()==1){
res--;
ans=max(ans,res+t.query(1,1,n,1,i-1));
// cerr<<i<<" "<<res<<" "<<t.query(1,1,n,1,i-1)<<endl;
continue;
}
ll it=lst[a[i]].back()-1;
lst[a[i]].pop_back();
t.modify(1,1,n,lst[a[i]].back(),it,-1);
ans=max(ans,res+t.query(1,1,n,1,i-1));
// cerr<<i<<" "<<res<<" "<<t.query(1,1,n,1,i-1)<<endl;
}
cout<<ans<<endl;
return ;
}
ll T=1;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// cin>>T;
for(ll kase=1;kase<=T;kase++){
solve();
}
return 0;
}
Submission Info
| Submission Time |
|
| Task |
F - Variety Split Hard |
| User |
XING_ginkiha |
| Language |
C++ 20 (gcc 12.2) |
| Score |
550 |
| Code Size |
2504 Byte |
| Status |
AC |
| Exec Time |
180 ms |
| Memory |
40988 KiB |
Compile Error
Main.cpp: In member function ‘void sgt::push_down(ll, ll, ll)’:
Main.cpp:24:32: warning: unused parameter ‘l’ [-Wunused-parameter]
24 | void push_down(ll x,ll l,ll r){
| ~~~^
Main.cpp:24:37: warning: unused parameter ‘r’ [-Wunused-parameter]
24 | void push_down(ll x,ll l,ll r){
| ~~~^
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
550 / 550 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_00.txt, 00_sample_01.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_00.txt |
AC |
2 ms |
3516 KiB |
| 00_sample_01.txt |
AC |
2 ms |
3440 KiB |
| 01_test_00.txt |
AC |
2 ms |
3452 KiB |
| 01_test_01.txt |
AC |
2 ms |
3472 KiB |
| 01_test_02.txt |
AC |
2 ms |
3472 KiB |
| 01_test_03.txt |
AC |
2 ms |
3512 KiB |
| 01_test_04.txt |
AC |
2 ms |
3476 KiB |
| 01_test_05.txt |
AC |
34 ms |
12224 KiB |
| 01_test_06.txt |
AC |
150 ms |
37940 KiB |
| 01_test_07.txt |
AC |
92 ms |
23524 KiB |
| 01_test_08.txt |
AC |
149 ms |
37872 KiB |
| 01_test_09.txt |
AC |
92 ms |
23628 KiB |
| 01_test_10.txt |
AC |
156 ms |
37884 KiB |
| 01_test_11.txt |
AC |
41 ms |
13392 KiB |
| 01_test_12.txt |
AC |
149 ms |
38012 KiB |
| 01_test_13.txt |
AC |
117 ms |
26888 KiB |
| 01_test_14.txt |
AC |
155 ms |
37884 KiB |
| 01_test_15.txt |
AC |
175 ms |
35916 KiB |
| 01_test_16.txt |
AC |
90 ms |
35404 KiB |
| 01_test_17.txt |
AC |
177 ms |
36384 KiB |
| 01_test_18.txt |
AC |
92 ms |
35928 KiB |
| 01_test_19.txt |
AC |
178 ms |
36812 KiB |
| 01_test_20.txt |
AC |
92 ms |
36588 KiB |
| 01_test_21.txt |
AC |
167 ms |
37128 KiB |
| 01_test_22.txt |
AC |
90 ms |
37164 KiB |
| 01_test_23.txt |
AC |
180 ms |
37548 KiB |
| 01_test_24.txt |
AC |
90 ms |
37452 KiB |
| 01_test_25.txt |
AC |
73 ms |
24100 KiB |
| 01_test_26.txt |
AC |
77 ms |
24060 KiB |
| 01_test_27.txt |
AC |
76 ms |
24400 KiB |
| 01_test_28.txt |
AC |
76 ms |
24424 KiB |
| 01_test_29.txt |
AC |
76 ms |
24516 KiB |
| 01_test_30.txt |
AC |
76 ms |
24404 KiB |
| 01_test_31.txt |
AC |
62 ms |
40916 KiB |
| 01_test_32.txt |
AC |
81 ms |
40988 KiB |
| 01_test_33.txt |
AC |
2 ms |
3496 KiB |
| 01_test_34.txt |
AC |
2 ms |
3448 KiB |
| 01_test_35.txt |
AC |
85 ms |
37864 KiB |
| 01_test_36.txt |
AC |
82 ms |
27088 KiB |
| 01_test_37.txt |
AC |
78 ms |
25912 KiB |
| 01_test_38.txt |
AC |
61 ms |
40860 KiB |
| 01_test_39.txt |
AC |
61 ms |
40872 KiB |
| 01_test_40.txt |
AC |
62 ms |
40860 KiB |
| 01_test_41.txt |
AC |
62 ms |
40908 KiB |