HDU-6047

原题链接
解题代码:

#include 
#include 
#include 
#include 
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;
}

你可能感兴趣的:(HDU,模拟)