QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#672391 | #9513. 环上排序信息最优分割 | WrongAnswer_90 | 0 | 0ms | 20628kb | C++23 | 6.9kb | 2024-10-24 16:41:15 | 2024-10-24 16:41:15 |
Judging History
answer
#include<bits/stdc++.h>
#define ull unsigned long long
#define ui unsigned int
#define ld long double
#define ll long long
#define lll __int128
#define fi first
#define se second
#define e emplace
#define eb emplace_back
#define db double
#define ef emplace_front
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>
#define vll vector<ll>
#define vp vector<pii>
#define vt vector<tup>
#define all(x) x.begin(),x.end()
#define mp make_pair
#define FastI
#define FastO
//#define int ll
bool ST;
static const ll MOD=998244353,Phi=998244352,inv2=499122177,Root=3,iRoot=332748118;
static const ll inf=1073741823,Inf=4294967296,INF=4557430888798830399;
static const ld eps=1e-9,pi=3.1415926535;
char in[1<<20],*p1=in,*p2=in;
char out[1<<20],*p3=out;
using namespace std;
struct tup
{
int x,y,z;
tup(int X=0,int Y=0,int Z=0)
{x=X,y=Y,z=Z;}
};
#ifdef FastI
#define getchar() (p1==p2&&(p2=(p1=in)+fread(in,1,1<<20,stdin),p1==p2)?EOF:*p1++)
#endif
#ifdef FastO
#define putchar(x) (p3-out==1<<20?fwrite(out,1,1<<20,stdout),p3=out,0:0,*p3++=x)
#define puts(x) write(x,'\n')
#endif
namespace FastIO
{
template<typename T> inline void write(T x,char ch=' ')
{
if(is_same<char,T>::value)putchar(x);
else
{
if(x<0)x=-x,putchar('-');
static char st[25];
int top=0;
do st[top++]=x%10+'0',x/=10;while(x);
while(top)putchar(st[--top]);
}
ch!='~'?putchar(ch):0;
}
inline void write(const char*x,char ch=' ')
{
for(int i=0;x[i]!='\0';++i)putchar(x[i]);
ch!='~'?putchar(ch):0;
}
inline void read(char&s){do s=getchar();while(s=='\n'||s==' ');}
inline void read(char s[])
{
int len=0;char st;
do st=getchar();while(st=='\n'||st==' ');
s[++len]=st,st=getchar();
while(st!='\n'&&st!=' '&&st!='\r')s[++len]=st,st=getchar();
s[++len]='\0';
}
template<typename T> inline void read(T &s)
{
char ch=getchar();s=0;
while((ch>'9'||ch<'0')&&ch!='-')ch=getchar();
bool tf=(ch=='-'&&(ch=getchar()));
while(ch>='0'&&ch<='9')s=(s<<1)+(s<<3)+ch-'0',ch=getchar();
s=tf?-s:s;
}
inline void edl(){putchar('\n');}
template<typename T1,typename T2> inline void read(pair<T1,T2> &s){read(s.fi),read(s.se);}
template<typename T,typename...Args> inline void write(T x,Args...args){write(x,'~'),write(args...);}
template<typename T,typename...Args> inline void read(T&x,Args&...args){read(x),read(args...);}
#ifdef FastO
struct Writer{~Writer(){fwrite(out,1,p3-out,stdout);}}Writ;
#endif
}
using namespace FastIO;
namespace MTool
{
inline int Cadd(int a,int b){return (ll)a+b>=MOD?(ll)a+b-MOD:a+b;}
inline int Cdel(int a,int b){return a-b<0?a-b+MOD:a-b;}
inline int Cmul(int a,int b){return 1ll*a*b%MOD;}
inline int sqr(int a){return 1ll*a*a%MOD;}
inline void Madd(int&a,int b){a=((ll)a+b>=MOD?(ll)a+b-MOD:a+b);}
inline void Mdel(int&a,int b){a=(a-b<0?a-b+MOD:a-b);}
inline void Mmul(int&a,int b){a=1ll*a*b%MOD;}
inline int Cmod(int x){return (x%MOD+MOD)%MOD;}
inline void Mmod(int&x){x=(x%MOD+MOD)%MOD;}
template<typename T> inline bool Mmax(T&a,T b){return a<b?a=b,1:0;}
template<typename T> inline bool Mmin(T&a,T b){return a>b?a=b,1:0;}
template<typename...Args> inline void Madd(int&a,int b,Args...args){Madd(a,b),Madd(a,args...);}
template<typename...Args> inline void Mmul(int&a,int b,Args...args){Mmul(a,b),Mmul(a,args...);}
template<typename...Args> inline void Mdel(int&a,int b,Args...args){Mdel(a,b),Mdel(a,args...);}
template<typename...Args> inline int Cadd(int a,int b,Args...args){return Cadd(Cadd(a,b),args...);}
template<typename...Args> inline int Cmul(int a,int b,Args...args){return Cmul(Cmul(a,b),args...);}
template<typename...Args> inline int Cdel(int a,int b,Args...args){return Cdel(Cdel(a,b),args...);}
template<typename...Args,typename T> inline bool Mmax(T&a,T b,Args...args){return Mmax(a,b)|Mmax(a,args...);}
template<typename...Args,typename T> inline bool Mmin(T&a,T b,Args...args){return Mmin(a,b)|Mmin(a,args...);}
inline int power(int x,int y){int s=1;for(;y;y>>=1,Mmul(x,x))if(y&1)Mmul(s,x);return s;}
}
using namespace MTool;
namespace WrongAnswer_90
{
int n;
vi A[200010],B[200010],from[200010];
vll F[200010];
#define clr(x) (vi().swap(x))
struct DS
{
int l,r,id;
ll sum;
multiset<int> st;
void ins(int x)
{
auto it=st.lower_bound(x),pr=prev(it);
int L=*pr,R=*it;
st.insert(x);
// cerr<<sum<<" ";
sum-=2ll*(R-x)*(x-L);
// cerr<<id<<" "<<L<<" "<<R<<" "<<x<<' '<<sum<<endl;
}
void del(int x)
{
st.erase(st.find(x));
auto it=st.lower_bound(x),pr=prev(it);
int L=*pr,R=*it;
sum+=2ll*(R-x)*(x-L);
}
void move(int _l,int _r)
{
while(l>_l)ins(A[(id+n-2)%n+1][--l]);
while(l<_l)del(A[(id+n-2)%n+1][l++]);
while(r<_r)ins(A[id][++r]);
while(r>_r)del(A[id][r--]);
}
}t[200010];
ll ans=INF;
void Solve(int l,int r,int L,int R,int id)
{
if(l>r)return;
int mid=(l+r)>>1;
for(int i=L;i<=R;++i)
{
t[id].move(i,mid);
if(Mmin(F[id][mid],t[id].sum+F[id-1][i-1]))
from[id][mid]=i;
}
Solve(l,mid-1,L,from[id][mid],id);
Solve(mid+1,r,from[id][mid],R,id);
}
void solve(int l,int r,vi L,vi R)
{
if(l>r)return clr(L),clr(R),void();
int mid=(l+r)>>1;
for(int j=L[1];j<=R[1];++j)
F[1][j]=INF;
F[1][mid]=0;
for(int i=2;i<=n;++i)
{
for(int j=L[i];j<=R[i];++j)
F[i][j]=INF;
Solve(L[i],R[i],L[i-1],R[i-1],i);
}
ll val=INF;
vi Mid(n+1);
for(int i=L[n];i<=R[n];++i)
{
t[1].move(i,mid);
if(Mmin(val,F[n][i-1]+t[1].sum))
Mid[n]=i;
}
Mmin(ans,val);
// cerr<<ans<<" "<<val<<endl;
// for(int x=1;x<=n;++x,cerr<<endl)
// for(int i=1;i<F[x].size();++i)
// cerr<<F[x][i]<<" ";
// cerr<<endl;
// for(int x=1;x<=n;++x,cerr<<endl)
// for(int i=1;i<F[x].size();++i)
// cerr<<from[x][i]<<" ";
// cerr<<endl;
// cerr<<ans;exit(0);
for(int i=n;i>1;--i)
Mid[i-1]=from[i][Mid[i]];
solve(l,mid-1,L,Mid);
solve(mid+1,r,Mid,R);
clr(L),clr(R),clr(Mid);
}
void mian()
{
int x,minn=inf,mini=-1;
read(n);
for(int i=1;i<=n;++i)
{
read(x);
B[i].resize(x+1);
for(int j=1;j<=x;++j)read(B[i][j]);
if(Mmin(minn,(int)B[i].size()))
mini=i;
}
for(int i=mini;i<=n;++i)A[i-mini+1]=B[i];
for(int i=1;i<mini;++i)A[n-mini+i+1]=B[i];
vi L(1),R(1);
for(int i=1;i<=n;++i)
{
F[i].resize(A[i].size());
from[i].resize(A[i].size());
t[i].sum=4e12;
t[i].id=i;
t[i].l=A[(i+n-2)%n+1].size(),t[i].r=0;
t[i].st.insert(0),t[i].st.insert(2e6);
L.eb(0),R.eb(A[i].size()-1);
}
solve(0,A[1].size()-1,L,R);
write(ans);
}
inline void Mian()
{
int T=1;
// read(T);
while(T--)mian();
}
}
bool ED;
signed main()
{
// ios::sync_with_stdio(0);
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
double st=clock();
WrongAnswer_90::Mian();
double ed=clock();
cerr<<endl;
cerr<<"Time: "<<ed-st<<" ms\n";
cerr<<"Memory: "<<abs(&ST-&ED)/1024.0/1024.0<<" MB\n";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 20628kb
input:
7 2 141209 1121811 2 812367 1802201 2 977174 168547 2 1687591 770753 2 383640 1117793 2 976813 1295653 2 1204905 1272531
output:
1522209298791
result:
wrong answer 1st lines differ - expected: '11670772336006', found: '1522209298791 '
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Skipped
Dependency #2:
0%
Subtask #4:
score: 0
Skipped
Dependency #3:
0%