nyoj- 117 求逆序数 hdu-sort it---- 树状数组
nyoj-117(离散化)
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
long long a[1000009];
int n;
struct ni
{int v,w;
}b[1000009];
int cmp(ni q,ni p)
{if(q.v!=p.v) return q.v<p.v;return q.w<p.w;
}
int lowbit(int x)
{return x&(-x);
}
int sum(int pos)
{int res=0;while(pos>0){res+=a[pos];pos-=lowbit(pos);}return res;
}
void plus(int pos)
{while(pos<=n){a[pos]++;pos+=lowbit(pos);}
}
int main()
{int m,i;scanf("%d",&m);while(m--){memset(a,0,sizeof(a));scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&b[i].v);b[i].w=i;}sort(b+1,b+n+1,cmp);long long k=0;for(i=1;i<=n;i++){plus(b[i].w);k+=i-sum(b[i].w);}printf("%lld\n",k);}
}
hdu-sort it
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[1005];
int n;
int lowbit(int x)
{return x&(-x);
}
void add(int pos,int num)
{while(pos <= n){a[pos] += num;pos += lowbit(pos);}
}
int Get_sum(int pos)
{int res = 0;while(pos > 0){res += a[pos];pos -= lowbit(pos);}return res;
}
int main()
{int x;while(~scanf("%d",&n)){memset(a,0,sizeof(a));int sum = 0;for(int i = 1; i <= n; i++){scanf("%d",&x);add(x,1);sum += i - Get_sum(x);}printf("%d\n",sum);}
}
nyoj- 117 求逆序数 hdu-sort it---- 树状数组相关推荐
- NYOJ 117 求逆序数
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序 ...
- HDU 6681(树状数组统计平面内射线的交点个数)
HDU 6681(树状数组,统计平面内射线的交点个数) 题目链接:传送门 题意:给出k条射线,求射线将n∗mn*mn∗m 的区域分成几个联通块.每两条射线的端点x坐标和y坐标都互不相同. 思路:根据 ...
- 【Luogu1908】逆序对(离散化,树状数组求逆序对)
problem 给你一个长为n的序列A[] 求该序列的逆序对个数 solution 用b[i]保存下标i在A中出现的次数,那么数组b[i]在[l,r]上的区间和,就表示序列A在范围[l,r]内的有多少 ...
- HDU - 5775 - Bubble Sort( 树状数组 + 思维 )
题目链接:点击进入 题目 题意 问在给出的冒泡排序过程中,一个数到达的最右边位置与最左边位置距离差. 思路 对于一个数,位置 i ,假设右边比它小的数有 r 个,左边比它大的数有 l 个,最右边到达的 ...
- HDU 4638 Group 树状数组 + 思路
实际上就是问这个区间编号连续的段的个数,假如一个编号连续的段有(a+b)个人,我把他们分在同一组能得到的分值为(a+b)^2,而把他们分成人数为a和b的两组的话,得到的分值就是a^2+b^2,显然(a ...
- P3157-[CQOI2011]动态逆序对【CDQ分治,树状数组】
正题 题目链接:https://www.luogu.com.cn/problem/P3157 题目大意 一个长度为nnn序列,每次删除一个数,求删除前的逆序对数量. 解题思路 时光倒流之后,我们变为每 ...
- hdu 5497 Inversion(树状数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5497 解题思路: 用树状数组维护一段区间L,区间长度为m,依次枚举该区间的终点ai,即将该点加入到区间 ...
- HDU 4325 离散化+树状数组 或者 不使用树状数组
题意:给出一些花的开放时间段,然后询问某个时间点有几朵花正在开放. 由于ti<1e9,我们需要先将时间离散化,然后将时间点抽象为一个数组中的点,显然,我们需要进行区间更新和单点查询,可以考虑线段 ...
- C - Group HDU - 4638[离线+树状数组]
感觉比较抽象:举个例子:a[] = {3 1 2 5 4} 树状数组里面:1,1,-1,1,-1 sum(2):就是[1,2]区间能分成多少个连续的段:1和3 sum(3):1 2 3是一段 如果是询 ...
- 快速求区间和的有趣算法——树状数组
好久没写东西,感觉有写些什么的必要了.(高仿鲁迅) 树状数组虽然听起来名字高大上,但是不是很难(前缀和是名字高大上,却水得像海洋) 树状数组在单纯的查询一个区间的和和修改某一个数的效率要超过线段树哦! ...
最新文章
- Camera HDR Algorithms
- VB编程宣告终结,微软:不再提供新功能
- java singleton 数据清楚_成都汇智动力-java singleton
- hive(2)——hive基本操作
- 使用JUnit 5测试异常
- 第五十七期:小型企业将如何从5G中受益
- Jquery mobile 新手问题总汇
- 字典和键值对换输出_Python知识小结—字典
- Docker学习总结(22)——Docke run命令详解
- Codeforces - 1176E - Cover it! - bfs
- Java的Socket编程C/S小例子
- oracle 拼音首字母查询,用Oracle的NLSSORT获取拼音首字母
- java则么实现md5解密_java的md5解密
- 用Python画个新冠病毒
- 朋友圈一杠中间一个点_朋友圈只显示一条线 中间一个点 是被删除了么
- 联想微型计算机如何设置u盘启动,联想电脑怎么设置U盘启动
- xampp linux 设置密码,Linux下安装xampp
- 美国大学生足球联赛数据集football——DeepWalk算法
- 用 Ruby on Rails 实现适应各种平台的在线 Office 文档预览
- 如何把灰色的图片背景换成白底图?