博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2689 Sort it【树状数组】
阅读量:6197 次
发布时间:2019-06-21

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

Sort it

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 4672    Accepted Submission(s): 3244

Problem Description
You want to processe a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. Then how many times it need.
For example, 1 2 3 5 4, we only need one operation : swap 5 and 4.
 

 

Input
The input consists of a number of test cases. Each case consists of two lines: the first line contains a positive integer n (n <= 1000); the next line contains a permutation of the n integers from 1 to n.
 

 

Output
For each case, output the minimum times need to sort it in ascending order on a single line.
 

 

Sample Input
3
1 2 3
4
4 3 2 1
 

 

Sample Output
0
6
 

 

Author
WhereIsHeroFrom
 

 

Source
 

 

Recommend
题目链接:
分析:好吧,我智障了,听说有种很快的写法,但好像跑的速度没我快?应该是我代码跑的最快吧,写法也是最复杂的,这题我是用树状数组乱搞的,反正15ms,相当快啊!
下面给出AC代码:
1 #include 
2 using namespace std; 3 typedef long long ll; 4 inline int read() 5 { 6 int x=0,f=1; 7 char ch=getchar(); 8 while(ch<'0'||ch>'9') 9 {10 if(ch=='-')11 f=-1;12 ch=getchar();13 }14 while(ch>='0'&&ch<='9')15 {16 x=x*10+ch-'0';17 ch=getchar();18 }19 return x*f;20 }21 inline void write(int x)22 {23 if(x<0)24 {25 putchar('-');26 x=-x;27 }28 if(x>9)29 {30 write(x/10);31 }32 putchar(x%10+'0');33 }34 const int N=1001;35 int n;36 int num[N];37 int c[N];38 struct node39 {40 int x;41 int id;42 }q[N] ;43 bool cmp(node a,node b)44 {45 return a.x
0)55 {56 s+=c[x];57 x-=lowbit(x);58 }59 return s;60 }61 void add(int x,int y)62 {63 while(x<=n)64 {65 c[x]+=y;66 x+=lowbit(x);67 }68 }69 int main()70 {71 while(scanf("%d",&n)!=EOF)72 {73 memset(c,0,sizeof(c));74 memset(num,0,sizeof(num));75 for(int i=1;i<=n;i++)76 {77 scanf("%d",&q[i].x);78 q[i].id=i;79 }80 sort(q+1,q+1+n,cmp);81 for(int i=1;i<=n;i++)82 {83 num[q[i].id]=i;84 }85 int sum = 0;86 for(int i=1;i<=n;i++)87 {88 add(num[i],1);89 sum+=getsum(n)-getsum(num[i]);90 }91 printf("%d\n",sum);92 }93 return 0;94 }

 

转载地址:http://ltjca.baihongyu.com/

你可能感兴趣的文章
AVEVA PML.Net for DWG
查看>>
拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录
查看>>
numpy基础代码操练
查看>>
CloudCC:企业管理者如何与CRM"冰释前嫌"?
查看>>
《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一1.13 基本类型流
查看>>
2015哪些SDN亮点值得我们回顾?
查看>>
民航空中WIFI业务的现状与未来
查看>>
Hadoop服务器配置不当致使全球5120TB数据泄露,中国和美国受伤最深
查看>>
智能机器人上演“最强大脑”,化身安全助手护航云安全
查看>>
Scanners-Box:开源扫描器集合
查看>>
武汉大学:最美大学最美网络
查看>>
《中国人工智能学会通讯》——8.40 结 论
查看>>
性能提升48%!西数新版黑盘开卖
查看>>
乐富支付:互联网金融下的民企新生态
查看>>
Gartner:2017年全球IT支出预计增长1.4%
查看>>
CCleaner恶意代码分析预警
查看>>
第二届全国大学生RDMA编程挑战赛开赛
查看>>
看似安全的金融行业,真的坚不可摧吗?
查看>>
jquery判断手机浏览器版本
查看>>
大数据驱动移动APP经济时代降临
查看>>