zoukankan      html  css  js  c++  java
  • poj 1990

    题目链接

    借鉴cxlove大神的思路

    题意:听力v,位置x,2个牛交流声音为max(v1,v2)*(x1-x2),求总的

    10000^2 tle

    用的树状数组做的,排序,2个,小于vi的牛的总数和距离总和

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define maxn 20005
    int arr[maxn],s[maxn];
    //pair<int , int> cow[MAXN]; 类似结构体
    struct tree
    {
        int x,v;
    }a[maxn];
    int cmp(tree a,tree b)
    {
        return a.v<b.v;
    }
    int lowbit(int x)
    {
        return x&-x;
    }
    void update(int *a,int x,int val)
    {
        while(x<maxn)
        {
            a[x]+=val;
            x+=lowbit(x);
        }
    }
    int getsum(int *a,int x)
    {
        int sum=0;
        while(x>0)
        {
            sum+=a[x];
            x-=lowbit(x);
        }
        return sum;
    }
    int main()
    {
        int n,i,j;
        while(scanf("%d",&n)!=EOF)
        {
            memset(arr,0,sizeof(arr));
            memset(s,0,sizeof(s));
            for(i=0;i<n;i++) scanf("%d%d",&a[i].v,&a[i].x);
            __int64 ans=0,total=0;
            sort(a,a+n,cmp);
            for(i=0;i<n;i++Q){
                update(arr,a[i].x,1);
                update(s,a[i].x,a[i].x);
                total+=a[i].x;
                __int64 s_num=getsum(arr,a[i].x);
                __int64 s_x=getsum(s,a[i].x);
                ans+=a[i].v*(s_num*a[i].x-s_x+total-s_x-(i+1-s_num)*a[i].x);
    
            }
            printf("%I64d
    ",ans);
        }
        return 0;
    }
    


     

  • 相关阅读:
    复制文字时自动加版权
    Linux安装Docker
    ThreadLocal 理解
    Spring多数据源动态切换
    [LOJ#500]「LibreOJ β Round」ZQC的拼图
    [JLOI2015]装备购买
    「雅礼集训 2017 Day4」洗衣服
    [BJWC2011]元素
    [51nod1577]异或凑数
    [ARC101B]Median of Medians
  • 原文地址:https://www.cnblogs.com/riskyer/p/3266451.html
Copyright © 2011-2022 走看看