hdu3015树状数组 poj1990的离散化版本
都是一类题目,推导调试比较烦,想出来还是不难的
/*
给定n个点对,按一维升序排序一次,每个点的序号为Di,按二维升序排序一次,每个点的序号为Hi
求sum{w(i,j)}
w(i,j)=abs(Di-Dj)*min(Hi-Hj) 那么将所有的点按照H升序排列,两个树状数组,一个维护区间d的个数,一个维护区间d的总和
每个点的贡献值=树状数组中D小于其的+D大于其的abs 按升序遍历每个点后,将该点在树状数组中删掉
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005
struct node {
ll a,b;//x坐标,高度
int num1,num2;//D,H
}t[maxn];
int n;
ll bitc[maxn],bitd[maxn];
int cmpa(node x,node y){return x.a<y.a;}
int cmpb(node x,node y){return x.b<y.b;}
int cmpc(node x,node y){return x.num2<y.num2;}
void add1(int x,int num){
for(int i=x;i<=;i+=i&-i)
bitc[i]+=num;
}
void add2(int x,int num){
for(int i=x;i<=;i+=i&-i)
bitd[i]+=num;
}
ll query1(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bitc[i];
return res;
}
ll query2(int x){
ll res=;
for(int i=x;i;i-=i&-i)
res+=bitd[i];
return res;
}
int main(){
while(scanf("%d",&n)==){
memset(bitc,,sizeof bitc);
memset(bitd,,sizeof bitd);
for(int i=;i<=n;i++) scanf("%lld%lld",&t[i].a,&t[i].b);
sort(t+,t++n,cmpa);//按x坐标升序排列
for(int i=;i<=n;i++){
if(i==) t[i].num1=i;
else if(t[i].a==t[i-].a) t[i].num1=t[i-].num1;
else t[i].num1=i;
}
int max=t[n].num1;
sort(t+,t++n,cmpb);//按高度升序排列
for(int i=;i<=n;i++){
if(i==) t[i].num2=i;
else if(t[i].b==t[i-].b) t[i].num2=t[i-].num2;
else t[i].num2=i;
}
sort(t+,t++n,cmpc);//按照h升序排列
for(int i=;i<=n;i++){add1(t[i].num1,);add2(t[i].num1,t[i].num1);} ll ans=;
for(int i=;i<n;i++){//最后一个点没有贡献度
ll tmp1=query1(t[i].num1-);//第i个点严格左边的
ll tmp2=query2(t[i].num1-);
ll tmp3=query1(t[i].num1);
ll tmp4=query2(t[i].num1);
ans+=t[i].num2*(t[i].num1*tmp1-tmp2);
ans+=t[i].num2*(query2(max+)-tmp4-t[i].num1*(query1(max+)-tmp3));//
add1(t[i].num1,-);
add2(t[i].num1,-t[i].num1);
}
printf("%lld\n",ans);
}
}
hdu3015树状数组 poj1990的离散化版本的更多相关文章
- HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)
题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...
- Educational Codeforces Round 10 D. Nested Segments 【树状数组区间更新 + 离散化 + stl】
任意门:http://codeforces.com/contest/652/problem/D D. Nested Segments time limit per test 2 seconds mem ...
- Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 1539 Solved: 665[Submit][Status][Di ...
- hdu5542 The Battle of Chibi【树状数组】【离散化】
The Battle of Chibi Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
- HDU 5877 Weak Pair DFS + 树状数组 + 其实不用离散化
http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...
- P1774 最接近神的人_NOI导刊2010[树状数组 逆序对 离散化]
题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...
- cf1042d 树状数组逆序对+离散化
/* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l]<t; sum[i]-t<sum[l],所以只要找到满足条 ...
- [luoguP3402] 最长公共子序列(DP + 离散化 + 树状数组)
传送门 比 P1439 排列LCS问题,难那么一点点,只不过有的元素不是两个串都有,还有数据范围变大,树状数组得打离散化. 不过如果用栈+二分的话还是一样的. ——代码 #include <cs ...
- 扫描线+树状数组——cf1191F
把所有点离散化,虚构一根扫描线从上往下扫,每行的点从左往右算贡献,开一个树状数组维护每个离散化后的x坐标是否已经有点 扫描到一个点时,先把这个点更新到树状数组里,每个点的贡献是它左边的所有点数*到它相 ...
随机推荐
- python 3字符编码
python 3字符编码 官方链接:http://legacy.python.org/dev/peps/pep-0263/ 在Python2中默认是ascii编码,Python3是utf-8编码 在p ...
- 浅谈js的数字格式
除了正常我们常用的十进制(如5,8,12.123等),js还可以直接表示2.8.16进制 1.二进制 二进制是以0b开头 0b10; 2.八进制 八进制是以0开头 010: 3.十六进制 十六进制是以 ...
- Vue.js 模板指令
1. 数据渲染:v-text.v-html(保存了html结构).{{}}(自动更新): 2. 控制模块隐藏:v-if:直接不渲染 DOM 元素: v-show:css 里的 display:none ...
- centos7.5 python修复
参考文章地址: 1.CentOS7修复python拯救yum: http://blog.51cto.com/welcomeweb/2132654 所有rpm包下载完成 wget http://mirr ...
- div中让内容能不换行就尽量不换行.【纯原】
div中让内容能不换行就尽量不换行,部分左对齐,部分右对齐. <html> <head> <title>九歌·少司命</title> <style ...
- 用jsch.jar实现SFTP上传下载删除【转】【补】
java类: 需要引用的jar: jsch-0.1.53.jar 关于jsch有篇文章关于目录的问题写得非常好:http://www.zzzyk.com/show/9f02969327434a6c.h ...
- docker部署安装
docker采用Linux内核技术,所以只能运行在Linux上,所谓的windows平台是使用boot2Docker工具,boot2Docker是在VisualBox构建一个linux精简化环境. B ...
- 为什么要用dubbo,dubbo和zookeeper关系
为什么要用dubbo? 当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架和流动式的架构就凸显出来了. 单一应用架构 当网站流量很小时,只需一个应用 ...
- VUE2.0 饿了吗视频学习笔记(六):定位问题、文字显示、模糊背景图片、点击事件
一.定位问题按照视频写代码时,发现元素“5个“”定位不对,如下图 正常位置为 还以为是哪里写错了,仔细研究了下,需要在父div上加relative. position:relative/absolut ...
- luogu 1064 金明的预算方案
01背包 变形,有主附件的背包内则更改决策 original: 1) 不选 2)选,f[j-w[i]]+v[i] now : 1)不选 2)选主 3)主 附1 4)主 附2 ...