zoukankan      html  css  js  c++  java
  • 【POJ1990】【Luogu P5094】【USACO2004open】MooFest

    $O(n^2)$的暴力十分好写,现在来优化。

    预处理:将牛按v从小到大排序。

    需要维护两个数据:之前的牛在当前牛i左、右的牛数量以及它们的坐标。

    易知i到左边所有牛的距离和=在左边的牛数×当前牛坐标-牛的坐标和。

    相应地,i到左边所有牛的距离和=牛的坐标和-在右边的牛数×当前牛坐标。

    开两个树状数组维护即可。

    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;++i)
    {
    	add(a[i].p,1ll,c1);add(a[i].p,a[i].p,c2);
    	lsum=(ll)a[i].p*ask(a[i].p-1,c1)-ask(a[i].p-1,c2);
    	rsum=ask(maxp,c2)-ask(a[i].p,c2)-(ll)a[i].p*(ask(maxp,c1)-ask(a[i].p,c1));
    	ans+=a[i].v*(lsum+rsum);
    }
    
  • 相关阅读:
    相关正则的一些知识
    数组中的方法
    封装ajax
    swiper结合ajax的轮播图
    事件
    原型、原型链
    HTML 常用标签
    HTML基础了解
    JSON 与 XML基本了解
    JavaScript(js)
  • 原文地址:https://www.cnblogs.com/xzs123456/p/10427656.html
Copyright © 2011-2022 走看看