原题链接
解题代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define mod 1000000007
int a[250005],b[250005];
int c[250005];
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
memset(c,0,sizeof(c));
for(int i=1;i<=N;i++)
{
scanf("%d",&a[i]);
a[i]-=i;
}
for(int i=1;i<=N;i++)
scanf("%d",&b[i]);
sort(b+1,b+1+N);
for(int i=N;i>=1;i--)
c[i]=max(c[i+1],a[i]);
long long int sum=0;
int max1=-1;
for(int i=1;i<=N;i++)
{
int x=max(c[b[i]],max1);
sum+=x;
sum%=mod;
max1=max(max1,x-N-i);
}
printf("%lld\n",(sum+mod)%mod);
}
return 0;
}