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 |
|
|
| 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 |