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
AC × 2
AC × 44
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