poj1990两个树状数组
垃圾poj交不上去
/*
按权值从小到大排序,
两个树状数组维护权值小于等于并且在i左边的点的个数和权值
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 20005
#define ll long long
struct node{
int w,x;
bool operator<(const node & a)const {
return w<a.w;
}
}a[maxn];
int n;
ll bitcnt[maxn],bittot[maxn],sum;
void add1(int x,int val){//bitcnt
for(int i=x;i<=;i+=i&-i)
bitcnt[i]+=val;
}
void add2(int x,int val){//bittot
for(int i=x;i<=;i+=i&-i)
bittot[i]+=val;
}
ll query1(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bitcnt[i];
return res;
}
ll query2(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bittot[i];
return res;
} int main(){
while(scanf("%d",&n)==){
memset(bitcnt,,sizeof bitcnt);
memset(bittot,,sizeof bittot);
sum=; for(int i=;i<n;i++) scanf("%d%d",&a[i].w,&a[i].x);
sort(a,a+n); ll ans=;
for(int i=;i<n;i++){
ll left_node=query1(a[i].x);
ll left_total=query2(a[i].x); ans+=a[i].w*(left_node*a[i].x-left_total);
ans+=a[i].w*((sum-left_total-(i-left_node)*a[i].x));
sum+=a[i].x;
add1(a[i].x,);
add2(a[i].x,a[i].x);
}
printf("%lld\n",ans);
}
return ;
}
poj1990两个树状数组的更多相关文章
- POJ-1990 MooFest---两个树状数组
题目链接: https://vjudge.net/problem/POJ-1990 题目大意: 一群牛参加完牛的节日后都有了不同程度的耳聋,第i头牛听见别人的讲话,别人的音量必须大于v[i],当两头牛 ...
- hdu-3015 Disharmony Trees---离散化+两个树状数组
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3015 题目大意: 有一些树,这些树的高度和位置给出.现在高度和位置都按从小到大排序,对应一个新的ra ...
- hdu3015,poj1990树状数组
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015 题意:给定n组数,每组数有值x和值h,求n组数两两的val的总和.将所有x和所有h分别离散化(不 ...
- poj1990树状数组
Every year, Farmer John's N (1 <= N <= 20,000) cows attend "MooFest",a social gather ...
- hdu3015树状数组 poj1990的离散化版本
都是一类题目,推导调试比较烦,想出来还是不难的 /* 给定n个点对,按一维升序排序一次,每个点的序号为Di,按二维升序排序一次,每个点的序号为Hi 求sum{w(i,j)} w(i,j)=abs(Di ...
- Inversion_树状数组***
Problem Description You have a sequence {a1,a2,...,an} and you can delete a contiguous subsequence o ...
- HDU5792 World is Exploding(树状数组)
一共6种情况,a < b且Aa < Ab, c < d 且Ac > Ad,这两种情况数量相乘,再减去a = c, a = d, b = c, b = d这四种情况,使用树状数组 ...
- POJ 1990 MooFest(树状数组)
MooFest Time Limit: 1000MS Mem ...
- hdu-5497 Inversion(滑动窗口+树状数组)
题目链接: Inversion Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)T ...
随机推荐
- 版本控制工具Git工具快速入门-Linux篇
版本控制工具Git工具快速入门-Linux篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.版本管理系统的介绍 1>.版本管理系统的特点 1.1>.自动生成备份: ...
- MySQL 5.6版本内存占用过高的解决办法
最近在阿里云购买了一台云服务器,因为是自己测试玩的,所以配置按最低的来了,1G内存,然后啪啪啪(指键盘声音)的安装了JDK,Tomcat,MySQL(5.6)等一系列环境,开始很爽,然后噩梦开始了: ...
- 虚拟机下安装ubuntu后root密码登录失败的问题
问题描述: 在虚拟机下安装了ubuntu中要输入用户名,一般情况下大家都会输入一个自己的网名或绰号之类的,密码也在这时设置过了. 但是当安装成功之后,使用命令#su root,然后输入刚才设置的密码, ...
- Linux安装mysql过程(转+完善)
http://blog.csdn.net/jerome_s/article/details/52883234yum 安装MySQL 1. 检查安装情况 查看有没有安装过: ...
- luogu 1006 传纸条
三/四维dp,将两次传递均看作从左上而来,在dp过程中注意防止越界/重合 f[i][j][k][l]直接枚举两轮的点,如下 #include<bits/stdc++.h> #define ...
- android contentprovider内容提供者
contentprovider内容提供者:让其他app可以访问私有数据库(文件) 1.AndroidManifest.xml 配置provider <?xml version="1.0 ...
- WinRar 压缩接压缩文件
windows WinRAR 定时压缩文件 命名当天时间 设置时间格式: set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%" 指定 WinRAR ...
- python - class内置方法 doc/module/del(析构方法)/cal 方法
__doc__ # __doc__ #摘要信息 #这个属性不会继承给子类 class Test(): """这是摘要信息""" pass x ...
- oracle新建对象 权限管理
代码 CREATE USER target IDENTIFIED BY target ; GRANT CONNECT, RESOURCE TO target; 刚刚创建的oracle实例中会内建两个用 ...
- Informatic学习总结_day02_增量抽取
SELECT EMP.EMPNO, EMP.ENAME, EMP.JOB, EMP.MGR, EMP.HIREDATE, EMP.SAL, EMP.COMM, EMP.DEPTNO FROM EMP ...