MooFest 树状数组 + 前缀和
比较友好的数据结构题
建议读者好好思考思考…….
可以分析出与前缀和的关系, 之后就愉快的套起树状数组辣
#include <cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=200000+3;
long long C[6][N];
int x[N],v[N],A[N], n;
int cmp(int i,int j)
{
return x[i]<x[j];
}
int lowbit(int t)
{
return t&(-t);
}
void update(int x,int delta,int ty)
{
while(x<N){
C[ty][x]+=delta;
x+=lowbit(x);
}
}
long long query(int x,int ty)
{
long long tmp=0;
while(x>0){
tmp+=C[ty][x];
x-=lowbit(x);
}
return tmp;
}
int main()
{
// freopen("in.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%lld%lld",&v[i],&x[i]);
for(int i=1;i<=n;++i)A[i]=i;
sort(A+1,A+1+n,cmp);
long long ans=0;
int cur;
for(int i=1;i<=n;++i) //正向枚举
{
cur=A[i];
long long a=query(v[cur], 0); //数量
long long b=query(v[cur],1); //距离
// printf("%lld %lld\n",a,b);
ans+=(long long)((a*x[cur]-b)*v[cur]);
update(v[cur]+1,1,0); //更新比x[i]大的数量
update(v[cur]+1,x[cur],1); //更新比x[i]大的距离和
}
for(int i=n;i>=1;--i)
{
cur=A[i];
long long a=query(v[cur],3);
long long b=query(v[cur],4);
ans+=(long long)(b-(a*x[cur]))*v[cur];
update(v[cur],1,3);
update(v[cur],x[cur],4);
}
printf("%lld",ans);
return 0;
}
MooFest 树状数组 + 前缀和的更多相关文章
- Codeforces Round #365 (Div. 2) D. Mishka and Interesting sum (离线树状数组+前缀xor)
题目链接:http://codeforces.com/contest/703/problem/D 给你n个数,m次查询,每次查询问你l到r之间出现偶数次的数字xor和是多少. 我们可以先预处理前缀和X ...
- 51nod 1081 子段求和(线段树 | 树状数组 | 前缀和)
题目链接:子段求和 题意:n个数字序列,m次询问,每次询问从第p个开始L长度序列的子段和为多少. 题解:线段树区间求和 | 树状数组区间求和 线段树: #include <cstdio> ...
- FZU2013 A short problem —— 线段树/树状数组 + 前缀和
题目链接:https://vjudge.net/problem/FZU-2013 Problem 2013 A short problem Accept: 356 Submit: 1083Ti ...
- POJ 1990 MooFest --树状数组
题意:牛的听力为v,两头牛i,j之间交流,需要max(v[i],v[j])*dist(i,j)的音量.求所有两两头牛交谈时音量总和∑(max(v[i],v[j])*abs(x[j]-x[i])) ,x ...
- ACM学习历程—HDU5700 区间交(树状数组 && 前缀和 && 排序)
http://acm.hdu.edu.cn/showproblem.php?pid=5700 这是这次百度之星初赛2B的第五题.省赛回来看了一下,有这样一个思路:对于所有的区间排序,按左值排序. 然后 ...
- CSU - 1551 Longest Increasing Subsequence Again —— 线段树/树状数组 + 前缀和&后缀和
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1551 题意: 给出一段序列, 删除其中一段连续的子序列(或者不删), 使得剩下的序列 ...
- BZOJ 3787 Gty的文艺妹子序列(分块+树状数组+前缀和)
题意 给出n个数,要求支持单点修改和区间逆序对,强制在线. n,m<=50000 题解 和不带修改差不多,预处理出smaller[i][j]代表前i块小于j的数的数量,但不能用f[i][j]代表 ...
- [noip科普]关于LIS和一类可以用树状数组优化的DP
预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法,我们可以将其不严谨地先理解为递推.例如斐波那契数列的递推求法可以不严谨地认为是DP.当然DP的状态也可以 ...
- 【洛谷 p3368】模板-树状数组 2(数据结构)
题目:已知一个数列,你需要进行下面两种操作:1.将某区间每一个数数加上x:2.求出某一个数的和. 解法:树状数组+前缀和优化.数组中每位存和前一位的数的差,这样区间修改只用改两位,单点询问就是求前缀和 ...
随机推荐
- ThinkPhp5.0 引入全局自定义函数global
可以直接调用:相当于global.class.php 全局文件 ==================================================================== ...
- Vue.js教程—1.介绍和安装
Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.Vue 只关注视图层, 采用自底向上增量开发的设计.Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定 ...
- javascript Prototype constructor的理解(转)
讲JS的构造的,这个比较清晰,但并不表示一定正确. 这几天一直在思考这个东东,感觉比以前理解更深入了. http://blog.csdn.net/chunqiuwei/article/details/ ...
- list转map工具类,根据指定的字段分组
import org.apache.log4j.Logger; import java.lang.reflect.Method;import java.util.ArrayList;import ja ...
- 5.2 calendar--通用日期的相关函数(4)
calendar类提供以下的函数来推断日历相关的内容: calendar.setfirstweekday(weekday) 设置一周里那一天作为第一天.0是表示星期一,6是表示星期天. 样例: #py ...
- Eclipse快捷操作
Eclipse快捷操作 快捷操作,包含了一些鼠标的操作: 学习了:http://www.cnblogs.com/iamfy/archive/2012/07/11/2586869.html 自己体会了一 ...
- Github Pages 建立过程记录
之前建立过一个測试页面. 如今在折腾CreateJS 试着把离线版的文档传到github pages上面. 第一步:创建Repository 第二步:本地初始化 主要命令:git init 第三步:复 ...
- CentOS 7通过yum安装fcitx五笔输入法
CentOS 7通过yum安装fcitx五笔输入法 下面通过了亲測: 1.设置源 Posted in Linux at 三月 5th, 2015 / No Comments ? 增加EPEL源 EPE ...
- git分支演示
https://learngitbranching.js.org https://github.com/pcottle/learnGitBranching no demo模式可以随便玩 https:/ ...
- hiho一下第76周《Suzhou Adventure》
我是菜鸡,我是菜鸡,我是菜鸡....重要的事说三遍 算是第一次做树形dp的题吧,不太难.. 园林构成一棵树,root为1,Hi从root出发,有k个园林必须玩,每个园林游玩后会得到权值w[i],最多玩 ...