没有题目描述qwq
https://www.luogu.org/problemnew/show/2345.
哈哈。。
开始想两次排序搞一搞,发现这个式子的两个玩意都得同时计算,分开计算就弄不清了。。
具体看图把。。

维护两个bit。我写了一个结构体。
这道题可以用bit的地方。
① 数据范围。②结果中,牛的声音越小,计算次数越小。
③ 关键也是把式子变一下。开始我听别人用线段树的时候我也是一头雾水。。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
/* 这两个是树状数组的基本功能。。我tm。是要把 答案的式子改一下。才可以。我开始写的时候,考虑到了最小的声音牛 一次都计算不了。倒数第二次的可以计算一次。一次类推。然后就想着 再排一下位置,然后递推一下位置。后来发现不可以。因为最后的结果和 位置和那里的牛都有关系。用两个树状数组维护,一个是小于当前声音的 数目。一个是小于 当前坐标的 牛的坐标和。
*/
typedef long long ll;
const int maxn=2e4+100;
struct Node{ll num;ll value;
}node[maxn];
int lowbit(int x){return x&(-x);
}
void add(int x,ll value){for(int i=x;i<maxn;i+=lowbit(i)){node[i].num++;node[i].value+=value;}
}
pair<int,ll> query(int x){int num=0;ll all=0;for(int i=x;i>0;i-=lowbit(i)){num+=node[i].num;all+=node[i].value;}return make_pair(num,all);
}
int m;
vector<pair<int,ll> >q;
bool cmp2(pair<ll,ll>a,pair<ll,ll>b){return a.first<b.first;
}
ll a,b;
int main()
{    scanf("%d",&m);for(int i=0;i<m;i++){scanf("%lld%lld",&a,&b);q.push_back(make_pair(a,b));}sort(q.begin(),q.end(),cmp2);ll qzh=0;ll ans=0;for(int i=0;i<q.size();i++){qzh+=q[i].second;add(q[i].second,q[i].second);pair<int,ll>u=query(q[i].second);ans=ans+(1ll*u.first*q[i].second-u.second)*q[i].first;ll sum2=qzh-u.second;ans=ans+max((sum2-1ll*((i+1)-u.first)*q[i].second),1ll*0)*q[i].first;//cout<<ans<<endl;}printf("%lld\n",ans);return 0;
}

nefuoj1249|洛谷P2345-树状数组推式子-你牛相关推荐

  1. 洛谷 - P3374 树状数组1

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

  2. 洛谷 P3374 树状数组模板1

    题目大意 给出一个初始数组,有两种操作,一种是将第x个数加上k,一种是求[x,y]区间和. 题目分析 直接暴力肯定TLE,我们可以用简单线段树或者树状数组优化,这里作者就采用简单线段树通过 #incl ...

  3. 洛谷.P3374 树状数组

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

  4. 洛谷P3374 树状数组模版1

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

  5. 树状数组入门——以洛谷3374为例

    树状数组入门 含义:顾名思义,用树状表示的数组 功能:是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值:经过简单修改可以在log( ...

  6. P2345 奶牛集会(树状数组/CDQ分治)

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

  7. poi 1990 MooFest(树状数组题目,转换成两个树状数组来做)较难的题目****

    1.http://poj.org/problem?id=1990 2.题目大意: 题意:FJ有n头牛,排列成一条直线(不会在同一个点),给出每头牛在直线上的坐标x.另外,每头牛还有一个自己的声调w,如 ...

  8. NEFU大一暑假集训-树状数组

    题集链接 目录: OP A Ultra-QuickSort 题目大意 思路 代码 B Stars 题目大意 思路 代码 C Mobile phones 题目大意 思路 代码 D Cows 题目大意 思 ...

  9. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

最新文章

  1. 万人马拉松赛事,人脸识别系统如何快速、准确完成校验?
  2. 在2D数组上进行迭代时,为什么循环顺序会影响性能?
  3. python对列表进行分页_python列表分页
  4. php获取当前周得周一_PHP怎样获得最近一个周一和上周一的日期?
  5. support v4官方下载_掌心长兴客户端下载-掌心长兴ap下载v4.1.4 安卓官方版
  6. 详细讲解Quartz.NET
  7. qq音乐2012绿色版
  8. c++内联函数解析(inline)
  9. 什么是决定计算机内部寄存器,问题解答之 计算机中寄存器定义,分类
  10. python删除文件命令_python 删除文件夹
  11. hdoj--2546--饭卡
  12. 消费者性别及其所偏好牛奶品牌频数分布
  13. hdu 5437 Alisha’s Party 优先队列
  14. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_17maven工程运行环境修改...
  15. 【通信基础知识】白噪声、相关解调和相干解调
  16. 如何在网上隐藏自己的IP地址(转)
  17. 爬虫实战(二)之登录百度云盘
  18. 0130更新:完美wine QQ2011正式版(5074)
  19. JavaScript数组对象深拷贝
  20. NTP 服务的配置和使用

热门文章

  1. 图解八皇后问题(递归)
  2. 推荐几款优秀的搜素引擎
  3. Protocol Buffer在MCU上的实现--C语言
  4. 【666IDC教你】如何区分一手高防服务器和代理高防服务器?
  5. 简易理发预约系统(Spring+SpringMVC+Mybatis)
  6. win10截图快捷键,有哪些方式的教程
  7. PMP报考条件、时间、费用、新版相关资讯
  8. 声网王浩宇:RTE 场景下的 Serverless 架构挑战【RTE 2022】
  9. 数据库一对多、 多对多案例
  10. twine upload设置账号和密码,避免每次都输账号和密码