标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 372 Accepted Submission(s): 186
/** 题意:给出一个数列,求某个区间的逆序数对有多少个 做法:因为N 最大1000 所以 枚举,还以为是笼统的归并排序 **/ #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <cmath> #define maxn 1010 using namespace std; int dp[maxn][maxn]; int mmap[maxn]; int main() { //#ifndef ONLINE_JUDGE // freopen("in.txt","r",stdin); //#endif // ONLINE_JUDGE int n,m; while(~scanf("%d %d",&n,&m)) { for(int i=1;i<=n;i++) { scanf("%d",&mmap[i]); } memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { if(mmap[i] > mmap[j]) dp[i][j] ++; } for(int j=1;j<=n;j++) { dp[i][j] += dp[i][j-1]; } } for(int i=n-1;i>0;i--) ///枚举i~j中任意一个区间的逆序数对 { for(int j=i+1;j<=n;j++) { dp[i][j] += dp[i+1][j]; } } while(m--) { int u,v; scanf("%d %d",&u,&v); printf("%d\n",dp[u][v]); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/chenyang920/p/4592451.html