P11214 梦熊T2 52分求调
#include<bits/stdc++.h>
#define int long long
using namespace std;
int m[200001],n[200001];
bool s[200001];
struct x{
int a1;
int b1;
}k[400001];
bool cmp1(x a,x b){
return a.a1<b.a1;
}
signed main(){
int a,ans=1,t,tot;
cin>>a;
t=a-1;
for(int i=1;i<=a;i++){
scanf("%d",&m[i]);
}
for(int i=1;i<=a;i++){
scanf("%d",&n[i]);
}
for(int i=1;i<=a;i++){
k[2*i-1].a1=m[i]-n[i];
k[2*i].a1=n[i]-1;
k[2*i-1].b1=k[2*i].b1=i;
}
sort(k+1,k+1+a*2,cmp1);
for(int i=1;i<=a*2;i++){
if(!s[k[i].b1]){
ans+=k[i].a1*pow(2,t);
s[k[i].b1]=1;
}else{
ans+=k[i].a1*pow(2,t+1);
break;
}
t--;
}
cout<<ans%1000000007;
return 0;
}