Submission #40440122


Source Code Expand

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
const int MAXN=1e6+10,mod=998244353,INF=1e8;
void add(ll& x,ll y){x=(x+y)%mod;}
void sub(ll& x,ll y){x=(x-y+mod)%mod;}
void tomax(ll& x,ll y){x=max(x,y);}
void tomin(ll& x,ll y){x=min(x,y);}
//
ll n,a[MAXN];
typedef vector<ll> vec;

struct D{ //离散化
	vec a;
	int tot;
	void add(int x){a.push_back(x);}
	void pr(){
		sort(a.begin(),a.end());
		auto ed=unique(a.begin(),a.end());
		while(a.end() != ed)a.pop_back();
		tot=a.size();
	}
	int qry(int x){return upper_bound(a.begin(),a.end(),x)-a.begin();}
}d[MAXN];
struct BIT{ 
	vec t;int n;
	void reset(int n){t.resize(n+1);fill(t.begin(),t.end(),0);this->n=n;}
	void mdf(int x,int v){for(;x<=n;x+=lowbit(x))add(t[x],v);}
	int qry(int x,ll S=0){for(;x;x-=lowbit(x))add(S,t[x]);return S;}
}t[2][MAXN];

vector<int>mdf[MAXN]; 

namespace Pre{
	int F(int x,int v){return 2*v+x;}
	int F2(int x,int v){return 2*v-x;}

	ll cnt[MAXN],suf[MAXN],key[MAXN];

	struct comp{
		bool operator()(const int x,const int y)const{
			if(key[x] != key[y])return key[x] > key[y];
			else return x > y;
		}
	};
	set<int,comp>S;

	void solve(){
		rep(i,1,n)suf[i]=INF,key[i]=-INF;
		rep(i,1,n)S.insert(i);

		per(i,n,1){
			tomin(suf[a[i]],F(i+1,cnt[a[i]]));
			S.erase(a[i]);
			cnt[a[i]]++;
			key[a[i]] = F(i,cnt[a[i]]) - i - suf[a[i]];
			S.insert(a[i]);
			for(auto u:S){
				if(key[u] <= -i)break;
				mdf[i].push_back(u);
			}
		}
	
		memset(cnt,0,sizeof cnt);
		rep(i,0,n-1){
			for(auto u:mdf[i+1]){
				d[u].add(F2(i,cnt[u]));
			}
			cnt[a[i+1]]++;
		}

	}
};
namespace CFM{
	int F(int x,int v){return 2*v-x;}

	ll dp[MAXN],cnt[MAXN],pre[MAXN],key[MAXN];
	struct comp{
		bool operator()(const int x,const int y)const{
			if(key[x] != key[y])return key[x] > key[y];
			else return x > y;
		}
	};
	set<int,comp>S;

	ll sum[2];
	void ensure(int i){

		for(auto u:mdf[i+1]){
			int pos=d[u].qry(F(i,cnt[u]));

			t[i&1][u].mdf(pos,dp[i]);
		}
		add(sum[i&1],dp[i]);
	}
	void solve(){
		rep(i,1,n)pre[i]=INF,key[i]=-INF;
		rep(i,1,n)S.insert(i);

		dp[0]=1;
		ensure(0);

		rep(i,1,n){
			tomin(pre[a[i]],F(i-1,cnt[a[i]]));
			S.erase(a[i]);
			cnt[a[i]]++;
			key[a[i]] = F(i,cnt[a[i]]) + i - pre[a[i]];
			S.insert(a[i]);

			dp[i] = sum[(i&1)];
			for(auto u:S){
				if(key[u] <= i)break;

				int lim=F(i,cnt[u]); // < lim
				int val=t[(i&1)][u].qry(d[u].qry(lim-1));
				sub(dp[i],val);
			}
			//
			ensure(i);
		}
	}
};

int main(){
	ios::sync_with_stdio(false);
	
	cin>>n;n*=2;
	rep(i,1,n)cin>>a[i];

	Pre::solve();
	rep(i,1,n){
		d[i].pr();
		t[0][i].reset(d[i].tot);
		t[1][i].reset(d[i].tot);
	}

	CFM::solve();

	cout<<CFM::dp[n]<<endl;

    return 0;
}

Submission Info

Submission Time
Task F - Good Division
User Crying
Language C++ (GCC 9.2.1)
Score 900
Code Size 3139 Byte
Status AC
Exec Time 3706 ms
Memory 402776 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 4
AC × 88
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_srnd_00.txt, 01_srnd_01.txt, 01_srnd_02.txt, 01_srnd_03.txt, 01_srnd_04.txt, 01_srnd_05.txt, 01_srnd_06.txt, 01_srnd_07.txt, 01_srnd_08.txt, 01_srnd_09.txt, 02_min_00.txt, 02_min_01.txt, 02_min_02.txt, 02_min_03.txt, 02_min_04.txt, 02_min_05.txt, 02_min_06.txt, 02_min_07.txt, 02_min_08.txt, 03_rnd_00.txt, 03_rnd_01.txt, 03_rnd_02.txt, 03_rnd_03.txt, 03_rnd_04.txt, 03_rnd_05.txt, 03_rnd_06.txt, 03_rnd_07.txt, 03_rnd_08.txt, 03_rnd_09.txt, 04_sqrt_00.txt, 04_sqrt_01.txt, 04_sqrt_02.txt, 04_sqrt_03.txt, 04_sqrt_04.txt, 04_sqrt_05.txt, 04_sqrt_06.txt, 04_sqrt_07.txt, 04_sqrt_08.txt, 04_sqrt_09.txt, 04_sqrt_10.txt, 05_one_00.txt, 05_one_01.txt, 05_one_02.txt, 06_two_00.txt, 06_two_01.txt, 06_two_02.txt, 06_two_03.txt, 06_two_04.txt, 06_two_05.txt, 07_few_00.txt, 07_few_01.txt, 07_few_02.txt, 07_few_03.txt, 07_few_04.txt, 07_few_05.txt, 07_few_06.txt, 07_few_07.txt, 07_few_08.txt, 08_many_00.txt, 08_many_01.txt, 08_many_02.txt, 08_many_03.txt, 08_many_04.txt, 08_many_05.txt, 08_many_06.txt, 08_many_07.txt, 08_many_08.txt, 09_perm_00.txt, 09_perm_01.txt, 09_perm_02.txt, 09_perm_03.txt, 10_pow_00.txt, 10_pow_01.txt, 10_pow_02.txt, 10_pow_03.txt, 10_pow_04.txt, 10_pow_05.txt, 10_pow_06.txt, 10_pow_07.txt, 11_special_00.txt, 11_special_01.txt, 11_special_02.txt, 11_special_03.txt, 11_special_04.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 87 ms 128576 KB
00_sample_01.txt AC 83 ms 128700 KB
00_sample_02.txt AC 83 ms 128652 KB
00_sample_03.txt AC 85 ms 128688 KB
01_srnd_00.txt AC 83 ms 128628 KB
01_srnd_01.txt AC 85 ms 128644 KB
01_srnd_02.txt AC 85 ms 128676 KB
01_srnd_03.txt AC 86 ms 128668 KB
01_srnd_04.txt AC 86 ms 128624 KB
01_srnd_05.txt AC 85 ms 128628 KB
01_srnd_06.txt AC 86 ms 128720 KB
01_srnd_07.txt AC 82 ms 128676 KB
01_srnd_08.txt AC 86 ms 128592 KB
01_srnd_09.txt AC 87 ms 128636 KB
02_min_00.txt AC 86 ms 128696 KB
02_min_01.txt AC 86 ms 128616 KB
02_min_02.txt AC 85 ms 128648 KB
02_min_03.txt AC 87 ms 128632 KB
02_min_04.txt AC 84 ms 128652 KB
02_min_05.txt AC 85 ms 128580 KB
02_min_06.txt AC 90 ms 128580 KB
02_min_07.txt AC 86 ms 128572 KB
02_min_08.txt AC 86 ms 128576 KB
03_rnd_00.txt AC 3706 ms 394012 KB
03_rnd_01.txt AC 2775 ms 397988 KB
03_rnd_02.txt AC 3623 ms 394496 KB
03_rnd_03.txt AC 2797 ms 399560 KB
03_rnd_04.txt AC 3451 ms 394920 KB
03_rnd_05.txt AC 2832 ms 398544 KB
03_rnd_06.txt AC 3434 ms 394872 KB
03_rnd_07.txt AC 2724 ms 396864 KB
03_rnd_08.txt AC 3537 ms 394376 KB
03_rnd_09.txt AC 2711 ms 399152 KB
04_sqrt_00.txt AC 1986 ms 396128 KB
04_sqrt_01.txt AC 1933 ms 392164 KB
04_sqrt_02.txt AC 1914 ms 392468 KB
04_sqrt_03.txt AC 1888 ms 393512 KB
04_sqrt_04.txt AC 1922 ms 393996 KB
04_sqrt_05.txt AC 1947 ms 394628 KB
04_sqrt_06.txt AC 1976 ms 395236 KB
04_sqrt_07.txt AC 1956 ms 396084 KB
04_sqrt_08.txt AC 1928 ms 396996 KB
04_sqrt_09.txt AC 1933 ms 398144 KB
04_sqrt_10.txt AC 1956 ms 397348 KB
05_one_00.txt AC 1675 ms 385936 KB
05_one_01.txt AC 1693 ms 385952 KB
05_one_02.txt AC 1672 ms 385940 KB
06_two_00.txt AC 1711 ms 378216 KB
06_two_01.txt AC 1638 ms 378092 KB
06_two_02.txt AC 1692 ms 378092 KB
06_two_03.txt AC 1679 ms 378264 KB
06_two_04.txt AC 1743 ms 378172 KB
06_two_05.txt AC 1832 ms 380932 KB
07_few_00.txt AC 1873 ms 383924 KB
07_few_01.txt AC 1806 ms 383484 KB
07_few_02.txt AC 1885 ms 387032 KB
07_few_03.txt AC 1756 ms 384496 KB
07_few_04.txt AC 1836 ms 388012 KB
07_few_05.txt AC 1783 ms 384768 KB
07_few_06.txt AC 1826 ms 388444 KB
07_few_07.txt AC 1746 ms 385068 KB
07_few_08.txt AC 1906 ms 388652 KB
08_many_00.txt AC 2674 ms 401452 KB
08_many_01.txt AC 3344 ms 396188 KB
08_many_02.txt AC 2684 ms 401428 KB
08_many_03.txt AC 3059 ms 396964 KB
08_many_04.txt AC 2460 ms 402516 KB
08_many_05.txt AC 3013 ms 397028 KB
08_many_06.txt AC 2451 ms 401984 KB
08_many_07.txt AC 2723 ms 397884 KB
08_many_08.txt AC 2494 ms 402776 KB
09_perm_00.txt AC 3223 ms 402064 KB
09_perm_01.txt AC 3305 ms 401980 KB
09_perm_02.txt AC 2681 ms 394168 KB
09_perm_03.txt AC 2663 ms 394284 KB
10_pow_00.txt AC 1871 ms 389992 KB
10_pow_01.txt AC 1838 ms 392668 KB
10_pow_02.txt AC 2026 ms 388172 KB
10_pow_03.txt AC 1983 ms 399592 KB
10_pow_04.txt AC 2177 ms 402036 KB
10_pow_05.txt AC 2441 ms 402076 KB
10_pow_06.txt AC 3474 ms 395964 KB
10_pow_07.txt AC 2823 ms 397876 KB
11_special_00.txt AC 3353 ms 394888 KB
11_special_01.txt AC 3268 ms 394812 KB
11_special_02.txt AC 3394 ms 395324 KB
11_special_03.txt AC 3008 ms 394028 KB
11_special_04.txt AC 3434 ms 395252 KB