#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7;
signed main()
{
int n;
cin>>n;
map<int,vector<int>> ind;
int a[n],b[n];
for (int i=0;i<n;i++)
cin>>a[i];
for (int i=0;i<n;i++)
cin>>b[i];
int mx=0,ans=0;
vector<int> ve;
for (int i=0;i<n;i++)
{
ind[a[i]].push_back(i);
ind[b[i]].push_back(i);
if (a[i]>b[i])
swap(a[i],b[i]);
mx=max(mx,a[i]);
ve.push_back(b[i]);
}
sort(ve.begin(),ve.end());
for (int i=0;i<n;i++)
{
int vl=1,id=0;
for (auto [x,v]:ind)
{
while (id<n && ve[id]<x)
vl=vl*2,vl-=(vl>=mod?mod:0),id++;
if (x<mx) continue;
int q=1,w=1;
bool e=0,r=0;
for (int j:v)
{
if (j==i) continue;
if (j<i)
{
if (b[j]==x)
q=q*2,q-=(q>=mod?mod:0);
else
e=1;
}
else
{
if (b[j]==x)
w=w*2,w-=(w>=mod?mod:0);
else
r=1;
}
}
int vl1=vl;
if (e)
vl1=vl1*q%mod;
else
vl1=vl1*(q-1)%mod;
if (r)
vl1=vl1*w%mod;
else
vl1=vl1*(w-1)%mod;
ans+=(x-a[i])*vl1%mod;
if (x>b[i])
ans+=(x-b[i])*vl1%mod;
}
}
cout<<ans<<endl;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |