Codeforces Round #212 (Div. 2) C

来源:互联网 发布:驱动精灵网络连接错误 编辑:程序博客网 时间:2024/05/16 10:50
// 预处理出所有数在这个序列内和1...n的大小关系的前缀和 #include <cstdio>#include <cstring>#include <algorithm>using namespace std;int n,a[5005],dp[5005][5005];int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)        scanf("%d",&a[i]),a[i]++;    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            if(a[i]>j)                dp[i][j]=dp[i-1][j]+1;            else                dp[i][j]=dp[i-1][j];        }    }    int sum=0;    for(int i=1;i<=n;i++)//计算所有逆序数对         sum+=dp[i][a[i]];    int Max=0,count=1;    for(int i=1;i<=n;i++)    {        for(int j=1;j<i;j++)        {            int now=dp[j][a[j]]+dp[i][a[i]];            int next=dp[i][a[j]]+dp[j][a[i]];            int temp=(now-next)*2+1;         //i,j改变后i..j区间的逆序数对的变化             if(temp>Max)                Max=temp,count=1;            else if(temp==Max)                count++;        }    }    printf("%d %d\n",sum-Max,count);    return 0;}

原创粉丝点击