zoukankan      html  css  js  c++  java
  • Frosh Week

    hdoj 3743

    题目大意:就是逆序数

    解决:树状数组+离散化,以后再也不会让题目给骗了,题目上并没有说是有多组测试数据,一直wa,不知道怎么回事,以为算法出问题了呢,但是可以运行一会时间,却原来是因为有多组测试数据,以后要注意,无论是若题目没有明确说明是一组,就按照多组来。顺便有练习下树状数组的离散化过程,其实和前边的的超快速排序没什么不一样,但是这次是从另一个角度出发的,统计出这个数出现之前所有比这个数大的数的个数,就是需要交换的次数了。

    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int N=1000000;
    #define LL __int64
    struct node
    {
        int id;
        int val;
    };
    node c[N+5];
    int a[N+5];
    int m[N+5];
    bool operator <(const node& a,const node&b)
    {
        return a.val < b.val;
    }
    inline int lowbit(int x)
    {
        return x&(-x);
    }
    void update(int p,int delta)
    {
        for(int i=p;i>0;i-=lowbit(i))
         m[i]+=delta;
    }
    int getsum(int p)
    {
        int res=0;
        for(int i=p;i<=N;i+=lowbit(i))
          res+=m[i];
        return res;  
    }
    int main()
    {
        int n,t;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=1;i<=n;i++)
            {
                 scanf("%d",&c[i].val);
                c[i].id=i;
            }
            sort(c+1,c+n+1);
            for(int i=1;i<=n;i++)
            a[c[i].id]=i;
            LL cnt=0;
            for(int i=1;i<=n;i++)
            {
                cnt+=getsum(a[i]+1);
                update(a[i],1);
             }
            printf("%I64d\n",cnt);
            memset(m,0,sizeof(m));
        }
        system("pause");
        return 0;
    }
    

  • 相关阅读:
    处理Excel的值
    期初数据导入
    返回当前网页的url
    每次Title显示不同的名言
    js做的皮肤更换,可以记住最后更换的效果。
    未知高度的居中
    一个上传多个图片的js技巧
    1205 鸽巢原理
    acm网址
    ios在真机上调试时出现“Error launching remote program: failed to get the task for process xxx"解决办法
  • 原文地址:https://www.cnblogs.com/hpustudent/p/2193317.html
Copyright © 2011-2022 走看看