Dylans loves sequence

来源:互联网 发布:大数据算法分析 编辑:程序博客网 时间:2024/05/16 19:19


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


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 Lx,yR and x<y and a[x]>a[y]
 

Input
In the first line there is two numbers N 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.

N1000,Q100000,LR,1a[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
 

Recommend
hujie   |   We have carefully selected several similar problems for you:  5275 5274 5272 5271 5270 



#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<stack>#include<queue>using namespace std;int dp[1010][1010];int figure[1010];int cont;int main(){    int m,n;    while(~scanf("%d%d",&n,&m))    {        for(int i=1;i<=n;i++)        {            scanf("%d",&figure[i]);        }        for(int i=2;i<=n;i++)       //从1到2.3.4.。。。。n的逆序数;        {            dp[1][i]=dp[1][i-1];            for(int j=1;j<i;j++)            {                if(figure[j]>figure[i])                dp[1][i]++;            }        }        for(int i=2;i<n;i++)                                       由1到n推i到j;        {            cont=figure[i-1]>figure[i]?1:0;            for(int j=i+1;j<=n;j++)            {                if(figure[i-1]>figure[j])cont++;                dp[i][j]=dp[i-1][j]-cont;            }        }        int u,v;        while(m--)        {            scanf("%d%d",&u,&v);            printf("%d\n",dp[u][v]);        }    }    return 0;}


0 0