都是一类题目,推导调试比较烦,想出来还是不难的

/*
给定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的离散化版本的更多相关文章

  1. HDU 4417 - Super Mario ( 划分树+二分 / 树状数组+离线处理+离散化)

    题意:给一个数组,每次询问输出在区间[L,R]之间小于H的数字的个数. 此题可以使用划分树在线解决. 划分树可以快速查询区间第K小个数字.逆向思考,判断小于H的最大的一个数字是区间第几小数,即是答案. ...

  2. 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 ...

  3. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 1539  Solved: 665[Submit][Status][Di ...

  4. hdu5542 The Battle of Chibi【树状数组】【离散化】

    The Battle of Chibi Time Limit: 6000/4000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Othe ...

  5. HDU 5877 Weak Pair DFS + 树状数组 + 其实不用离散化

    http://acm.hdu.edu.cn/listproblem.php?vol=49 给定一颗树,然后对于每一个节点,找到它的任何一个祖先u,如果num[u] * num[v] <= k.则 ...

  6. P1774 最接近神的人_NOI导刊2010[树状数组 逆序对 离散化]

    题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ...

  7. cf1042d 树状数组逆序对+离散化

    /* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l]<t; sum[i]-t<sum[l],所以只要找到满足条 ...

  8. [luoguP3402] 最长公共子序列(DP + 离散化 + 树状数组)

    传送门 比 P1439 排列LCS问题,难那么一点点,只不过有的元素不是两个串都有,还有数据范围变大,树状数组得打离散化. 不过如果用栈+二分的话还是一样的. ——代码 #include <cs ...

  9. 扫描线+树状数组——cf1191F

    把所有点离散化,虚构一根扫描线从上往下扫,每行的点从左往右算贡献,开一个树状数组维护每个离散化后的x坐标是否已经有点 扫描到一个点时,先把这个点更新到树状数组里,每个点的贡献是它左边的所有点数*到它相 ...

随机推荐

  1. Prometheus Redis_exporter

    Redis 下载redis_exporter wget https://github.com/oliver006/redis_exporter/releases/download/v0.15.0/re ...

  2. django 403问题

    C:\Users\x\pyp1>python manage.py runserverPerforming system checks... System check identified no ...

  3. Web Scraping with Python

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  4. Hadoop生态圈-Zookeeper的工作原理分析

    Hadoop生态圈-Zookeeper的工作原理分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   无论是是Kafka集群,还是producer和consumer都依赖于Zoo ...

  5. shell命令批量创建指定格式的文件

    shell命令批量创建文件 [root@w212 test]# for count in `seq 9` ;do echo "$count" > a.2018050$coun ...

  6. Python基础【day02】:元组和购物车练习的知识点

    一.元组 元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表 用途:一般情况下用于自己写的程序能存下数据,但是又希望这些数据不会被改变,比如:数据库连接信息等 1.元 ...

  7. JAVA记录-Web系统AJAX异步传递路径写法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. The android command is deprecated

    新版的SDK tools中的android命令已经不支持 android create project,用起来很不顺手. The "android" command is depr ...

  9. jsp中的JSTL与EL表达式用法

    JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库.JSTL函数标签库.数据库标签库.I18N格式化标签库.XML标签库. ...

  10. nxlog 日志采集

    Nxlog 主要用于各业务后端服务的日志采集,windows环境和linux环境都支持. RPM 包:rpm -ivh http://nxlog.co/system/files/products/fi ...