博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51nod 1107(树状数组、逆序数)
阅读量:5280 次
发布时间:2019-06-14

本文共 1110 字,大约阅读时间需要 3 分钟。

题目链接:

思路:其实就是升级版的逆序数,x坐标当作位置,y坐标当作数值val,只是可能有相等的数,稍作修改即可。

#include
using namespace std;typedef long long ll;const int N = 5e4 + 3;int lowbit(int x){ return x & (-x);}struct node{ int x,y,order;}q[N];int a[N],c[N],n;bool cmp1(node t1,node t2){ if(t1.x != t2.x) return t1.x < t2.x; return t1.y < t2.y;}bool cmp2(node t1,node t2){ if(t1.y != t2.y) return t1.y < t2.y; return t1.order < t2.order;}void update(int pos,int val){ for(int i = pos; i <= n; i += lowbit(i)) c[i] += val;}int sum(int pos){ int ans = 0; for(int i = pos; i > 0; i -= lowbit(i)) ans += c[i]; return ans;}int main(){ scanf("%d",&n); for(int i = 1; i <= n; i++) scanf("%d %d",&q[i].x,&q[i].y); sort(q+1,q+n+1,cmp1); for(int i = 1; i <= n; i++) q[i].order = i; sort(q+1,q+n+1,cmp2); for(int i = 1; i <= n; i++) a[q[i].order] = i; int ans = 0; for(int i = 1; i <= n; i++) { update(a[i],1); ans += i - sum(a[i]); } printf("%d\n",ans); return 0;}

 

转载于:https://www.cnblogs.com/westwind1005/p/6352990.html

你可能感兴趣的文章
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
CS61A Efficiency 笔记
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
Elasticsearch 滚动重启 必读
查看>>
Hadoop基本概念
查看>>
java.util.zip压缩打包文件总结一:压缩文件及文件下面的文件夹
查看>>
浅说 apache setenvif_module模块
查看>>
MySQL--数据插入
查看>>
重新学习python系列(二)? WTF?
查看>>
shell脚本统计文件中单词的个数
查看>>
SPCE061A学习笔记
查看>>
sql 函数
查看>>
hdu 2807 The Shortest Path 矩阵
查看>>
熟悉项目需求,要知道产品增删修改了哪些内容,才会更快更准确的在该项目入手。...
查看>>
JavaScript 变量
查看>>
java实用类
查看>>
smarty模板自定义变量
查看>>
研究称90%的癌症由非健康生活习惯导致
查看>>