zoukankan      html  css  js  c++  java
  • HDU-5273

    Dylans loves sequence

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


    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 2
    3 2 1
    1 2
    1 3
     
    Sample Output
    1 3
    Hint
    You shouldn't print any space in each end of the line in the hack data.
     
    Source
    /**
              题意:给出一个数列,求某个区间的逆序数对有多少个
              做法:因为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
    ",dp[u][v]);
                        }
              }
              return 0;
    }
     
  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/chenyang920/p/4592451.html
Copyright © 2011-2022 走看看