diff --git a/src/10/22/P11670.cpp b/src/10/22/P11670.cpp index c04f529..e9429df 100644 --- a/src/10/22/P11670.cpp +++ b/src/10/22/P11670.cpp @@ -7,8 +7,8 @@ using ll = int64_t; ll n,ans; -std::vector> anumcnt; -std::vector a; +std::vector> apos,bpos; +std::vector a,b; int main(){ std::iostream::sync_with_stdio(false); @@ -17,31 +17,37 @@ int main(){ std::cin>>n; a.resize(n+1); - anumcnt.resize(n+1); + b.resize(n+1); + apos.resize(n+1); + bpos.resize(n+1); for(ll i=1;i<=n;i++){ std::cin>>a[i]; - anumcnt[a[i]].push_back(i); + apos[a[i]].push_back(std::min(i,n-i+1)); } for(ll i=1;i<=n;i++){ - ll b,nans=0; - std::cin>>b; - if(a[i]==b){ - ll N=i-1; - nans+=N*(N+1)/2; - N=n-i; - nans+=N*(N+1)/2; - // printf("a[%lld]==b[%lld], +=%lld\n",i,i,nans); - } - ans+=nans; - nans=0; - for(ll ai:anumcnt[b]){ - ll l=std::min(ai,i); - ll r=std::min(n-ai+1,n-i+1); - nans += std::min(l,r); - } - // printf("b[%lld] l to r +=%lld\n",i,nans); - ans+=nans; + std::cin>>b[i]; + bpos[b[i]].push_back(std::min(i,n-i+1)); } + for(ll i=1;i<=n;i++){ + if(a[i]==b[i]){ + ll N=i-1; + ans+=N*(N+1)/2; + N=n-i; + ans+=N*(N+1)/2; + } + std::sort(apos[i].begin(),apos[i].end()); + std::sort(bpos[i].begin(),bpos[i].end()); + + ll pa=0,pb=0; + while(pa