[luogu]P2657

低头一族

题目描述

一群青年人排成一队,用手机互相聊天。

每个人的手机有一个信号接收指标,第i个人的接收指标设为v[i]。

如果位置在x[i]的人要和位置在xj的人聊天,那么这两人组成的一对的信号发射强度就是abs(x[i]-x[j])*max(v[i],v[j]).

现在我们想知道,这些人所有对子中的信号发射强度的总和。

输入输出格式

输入格式:
第一行一个整数N,接下来N行,每行两个整数v[i]和x[i]。

输出格式:
所有对的信号发射强度总和。

输入输出样例

输入样例1#:
4
3 1
2 5
2 6
4 3
输出样例1#:
57
【说明】
对于40%的数据,N<=5,000
对于100%的数据,N<=100,000 1≤x[i]≤20,000
注意:可能有两人在同一个位置
答案在int64或long long范围内


两点间距*两点价值最大
考虑对答案贡献的是某一价值,那么就是要找寻比他小的。所以我们先按v进行排序。
考虑用树状数组统计答案。
用两个树状数组,一个记录(1...i)中的x坐标和,另一个是个数。
那么这个点对答案的贡献为:
v[i]*(getnum(x[i])*x[i]-getsum(x[i])+tot-getsum(x[i])-(i-getnum(x))*x[i])
tot每次累加x[i]。

代码:

 #include<iostream>
 #include<cstdio>
 #include<cstring>
 #include<algorithm>
 using namespace std;
 typedef long long ll ;
 inline int read();
 namespace lys{
      ;
     struct LOW_head{
         int v;
         int x;
     }a[];
     ll bitS[N],bitN[N];
     int lowbit(int x){return x&(-x);}
     ll getS(int x){
         ll res=;
         for(;x;x-=lowbit(x)) res+=bitS[x];
         return res ;
     }
     ll getN(int x){
         ll res=;
         for(;x;x-=lowbit(x)) res+=bitN[x];
         return res ;
     }
     void insertS(int x,int y){for(;x<=N;x+=lowbit(x)) bitS[x]+=y;}
     void insertN(int x){for(;x<=N;x+=lowbit(x)) bitN[x]++;}
     bool cmp(const LOW_head &x,const LOW_head &y){return x.v<y.v;}
     int n;
     ll ans,tot;
     int main(){
         int i;
         n=read();
         ;i<n;i++) a[i].v=read(),a[i].x=read();
         sort(a,a+n,cmp);
         ;i<n;i++){
             ans+=1LL*a[i].v*(1LL*(*getN(a[i].x)-i)*a[i].x-*getS(a[i].x)+tot);
             tot+=a[i].x;
             insertS(a[i].x,a[i].x);
             insertN(a[i].x);
         }
         printf("%lld\n",ans);
         ;
     }
 }
 int main(){
     lys::main();
     ;
 }
 inline int read(){
     ,ff=;
     char c=getchar();
     '){
         ;
         c=getchar();
     }
     +c-',c=getchar();
     return kk*ff;
 }

[luogu]P2657低头一族[树状数组]的更多相关文章

  1. Luogu P3374 【模板】树状数组 1

    真正的模板题. 树状数组的思想很简单(不如说背代码更简单),每个节点记录多个节点的信息(每个点存x&(-x)个). 道理可以参见很多大佬的博客,最后前缀和的思想搞一下就好了.不想说也不会说. ...

  2. Luogu P4901 排队 fib数列+树状数组+倍增

    这题让我升华..还好只重构了一遍 首先我们发现:$n$较小时,整个队伍的形态 跟 $n$ 比较大时的局部是一样的 所以我们预处理出这个队伍的形态,和每一行每个位置的质因子个数的前缀和,$O(nlogn ...

  3. 【Luogu】P2617Dynamic Ranking(树状数组套主席树)

    题目链接 树状数组套主席树有点难懂qwq 不好理解 树状数组套主席树的直观理解应该是:树状数组的每一个节点是一棵主席树. 普通区间修改我们是创建1个线段树,树状数组套主席树的时候我们就创建log个线段 ...

  4. 题解报告:Luogu P3368 【模板】树状数组 2(区间修改,单点查询)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  5. luogu P4769 [NOI2018]冒泡排序 结论 树状数组 卡特兰数

    LINK:冒泡排序 神题. 可以想到爆搜 期望得分5~10分. 打成这个样子心态不得爆炸? 仔细分析 一个不合法序列还有什么标志. 容易想到某个数字离自己位置相反的方向多走了一步. 考虑单独对每个数字 ...

  6. luogu P3368 【模板】树状数组 2

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  7. luogu P2345 奶牛集会 |排序+树状数组

    题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很多,比如堆干草,跨栅栏,摸牛仔的屁股等等.它们参加活动时会聚在一起,第i 头奶牛的坐标为X ...

  8. BZOJ 1107: [POI2007]驾驶考试egz / Luogu P3463 [POI2007]EGZ-Driving Exam (树状数组 LIS)

    能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y ...

  9. LOJ P3960 列队 树状数组 vector

    https://www.luogu.org/problemnew/show/P3960 树状数组预处理之后直接搞就可以了,也不是很好解释,反正就是一个模拟过程的暴力用树状数组维护,还挺巧妙的. 我为什 ...

随机推荐

  1. Conetos 下安装docker 和镜像加速

    首先升级yum yum update 安装yum-utils,它提供yum-config-manager可以用来配置repo yum install -y yum-utils 使用以下命令设置稳定版 ...

  2. lambda得用法

  3. Qt - 基于TCP的网络编程

    TCP(传输控制协议 Transmission Control Protocol) 可靠.面向数据流.面向连接  的传输协议.(许多应用层协议都是以它为基础:HTTP.FTP) 使用情况: 相比UDP ...

  4. abp.event.on与abp.event.off使用

    apb的全局事件 var eventName = "app.createOrEditFieldModalSaved"; var reloadPage = function () { ...

  5. effective_io_concurrency很重要的一个参数

    effective_io_concurrency (integer) Sets the number of concurrent disk I/O operations that PostgreSQL ...

  6. nginx配置本地域名反向代理实现本地多域名80访问

    什么是反向代理? 代理:通过客户机的配置,实现让一台服务器代理客户机,客户的所有请求都交给代理服务器处理. 反向代理:用一台服务器,代理真实服务器,用户访问时,不再是访问真实服务器,而是代理服务器. ...

  7. 已知两个int变量a、b,定义4个方法分别对变量a、b进行加减乘除运算,并测试结果。

    package com.fs.test; public class Test { public void aMethod(int a, int b) { int add = a + b;//*表示加法 ...

  8. vue动态渲染图片,引用路径需要注意的地方

    1.把图片放在和src同级的static里面,这用按照正常的方式进行引入,例如: 2.图片可以在其他文件夹,但是在script引入是必须加上require <img :src="ite ...

  9. net 网站过滤器 mvc webapi

    WebApi过滤器1 public class TestController : ApiController { /// <summary> /// 获取用户信息 /// </sum ...

  10. java线程中的同步锁和互斥锁有什么区别?

    两者都包括对资源的独占. 区别是 1:互斥是通过竞争对资源的独占使用,彼此没有什么关系,也没有固定的执行顺序. 2:同步是线程通过一定的逻辑顺序占有资源,有一定的合作关系去完成任务.