UVALive 6508 Permutation Graphs
2016-03-28 13:52
246 查看
补这一道题,当时题意没有看懂,后来看懂了题意
给你n个点。然后又两个序列,然后把这两个序列中相等数连接起来,每两条连线中间看有几个点。求全部连线中间的点的个数和。
序列{2 , 5 , 4 , 1 ,3}和{1 ,5。3 ,2 ,4}的连接图例如以下
比方说1-1和4-4中间的点是5。3,2
显而易见这是求逆序对的个数
代入树状数组模板就可以
给你n个点。然后又两个序列,然后把这两个序列中相等数连接起来,每两条连线中间看有几个点。求全部连线中间的点的个数和。
序列{2 , 5 , 4 , 1 ,3}和{1 ,5。3 ,2 ,4}的连接图例如以下
比方说1-1和4-4中间的点是5。3,2
显而易见这是求逆序对的个数
代入树状数组模板就可以
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 111111 int bit ; int a ; int pos ; int n; int sum(int i) { int s=0; while(i>0) { s+=bit[i]; i=i&(i-1); } return s; } void add(int i,int xx) { while(i<=n) { bit[i]+=xx; i+=i&-i; } } int main() { int T; scanf("%d",&T); while(T--) { int ans = 0; memset(bit,0,sizeof(bit)); scanf("%d",&n); int x; for(int i=1; i<=n; i++) { scanf("%d",&x); pos[x] = i; } for(int i=0; i<n; i++) { scanf("%d",&x); ans+=i-sum(pos[x]); add(pos[x],1); } printf("%d\n",ans); } return 0; }
相关文章推荐
- 关于iOS开发内存管理的那些事儿
- linux 常用命令
- java war 打包、解压命令
- 含有/F的for
- 查看mysql数据库连接数、并发数相关信息
- has a 和 is a 的区别
- uva 167 - The Sultan's Successors(典型的八皇后问题)
- WIN8+VS2013编写发布WCF之三(调用)
- http://blog.csdn.net/sevenquan/article/details/50687077
- 第三周作业
- Content Compression Resistance和Content Hugging
- textField 详解
- Linux下配置Eclipse桌面快捷方式
- 《Python数据分析基础教程:Numpy学习指南》- 速记 - 第六章
- vs2010下LPTSTR赋值
- 当发现以前的自己是个傻逼时,该如何面对以后的人生
- maven assembly 配置详解
- 通过Html网页调用本地安卓(android)app
- Android四大组件之Activity
- 如何删除 顽固文件/文件夹