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;
    }
     
  • 相关阅读:
    (五)消费Dubbo服务
    (四)Dubbo Admin管理控制台
    (三)发布Dubbo服务
    (二)zookeeper安装
    (一)Dubbo简介
    解决tomcat 启动 一闪而过
    Redis的数据结构之哈希
    Redis的数据结构之字符串
    Jedis 连接池实例
    linux/centos定时任务cron
  • 原文地址:https://www.cnblogs.com/chenyang920/p/4592451.html
Copyright © 2011-2022 走看看