BestCoder Round #45 (1,2)

Dylans loves sequence

Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 195Accepted Submission(s): 105

Problem Description

Dylans is given N numbers a[1]….a[N]And there are Q questions.Each question is like this (L,R)his goal is to find the “inversions” from number L to number R.more formally,his needs to find the numbers of pair(x,y),that L≤x,y≤R and x<y and a[x]>a[y]

Input

In the first line there is two numbersN and Q.Then in the second line there are N numbers:a[1]..a[N]In the next Q lines,there are two numbers L,R in each line.N≤1000,Q≤100000,L≤R,1≤a[i]≤2311

Output

For each query,print the numbers of "inversions”

Sample Input

3 23 2 11 21 3

Sample Output

13

Hint

You shouldn’t print any space in each end of the line in the hack data.

Source

BestCoder Round #45

题目大意:求区间逆序数对数题目分析:用dp[i][j]预处理,,先算区间[i,j]中与a[i]成逆序对的数目,然后从后向前累加,相当于加一个a[j],看它对整个区间的逆序数对数是否有影响#include <cstdio>#include <cstring>int const MAX = 1005;int dp[MAX][MAX];int a[MAX];int main(){int n, q;scanf("%d %d", &n, &q);for(int i = 1; i <= n; i++)scanf("%d", &a[i]);memset(dp, 0, sizeof(dp));for(int i = 1; i <= n; i++)for(int j = i; j <= n; j++)dp[i][j] += (dp[i][j – 1] + (a[i] > a[j] ? 1 : 0));for(int j = n; j > 0; j–)for(int i = j; i > 0; i–)dp[i][j] += dp[i + 1][j];while(q–){int l, r;scanf("%d %d", &l, &r);printf("%d\n", dp[l][r]);}}

最大的成功在于最大的付出。

BestCoder Round #45 (1,2)

相关文章:

你感兴趣的文章:

标签云: