HDUOJ-----2838Cow Sorting(组合树状数组)
Cow Sorting
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2163 Accepted Submission(s): 671
Problem Description
Sherlock's N (1 ≤ N ≤ 100,000) cows are lined up to be milked in the evening. Each cow has a unique "grumpiness" level in the range 1...100,000. Since grumpy cows are more likely to damage Sherlock's milking equipment, Sherlock would like to reorder the cows in line so they are lined up in increasing order of grumpiness. During this process, the places of any two cows (necessarily adjacent) can be interchanged. Since grumpy cows are harder to move, it takes Sherlock a total of X + Y units of time to exchange two cows whose grumpiness levels are X and Y. Please help Sherlock calculate the minimal time required to reorder the cows.
Input
Line 1: A single integer: N Lines 2..N + 1: Each line contains a single integer: line i + 1 describes the grumpiness of cow i.
Output
Line 1: A single line with the minimal time required to reorder the cows in increasing order of grumpiness.
Sample Input
3 2 3 1
Sample Output
7
Hint
Input Details Three cows are standing in line with respective grumpiness levels 2, 3, and 1. Output Details 2 3 1 : Initial order. 2 1 3 : After interchanging cows with grumpiness 3 and 1 (time=1+3=4). 1 2 3 : After interchanging cows with grumpiness 1 and 2 (time=2+1=3).
Source
2009 Multi-University Training Contest 3 - Host by WHU
求逆序和求和....属于树状数组的组合题目...
代码:
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define maxn 100000
5 #define lowbit(x) ((x)&(-x))
6 __int64 aa[maxn+2]; //求逆序数
7 __int64 bb[maxn+2]; //求和
8 int n;
9 void ope(int x,__int64 *dat,int val)
10 {
11 while(x<=n)
12 {
13 dat[x]+=val;
14 x+=lowbit(x);
15 }
16 }
17 __int64 getsum(int x,__int64 *dat)
18 {
19 __int64 ans=0;
20 while(x>0)
21 {
22 ans+=dat[x];
23 x-=lowbit(x);
24 }
25 return ans;
26 }
27 int main()
28 {
29 int i,a;
30 __int64 res;
31 while(scanf("%d",&n)!=EOF)
32 {
33 memset(aa,0,sizeof(aa));
34 memset(bb,0,sizeof(bb));
35 res=0;
36 for(i=0;i<n;i++)
37 {
38 scanf("%d",&a);
39 res+=(getsum(maxn,aa)-getsum(a,aa))*a+(getsum(maxn,bb)-getsum(a,bb));
40 ope(a,bb,a);
41 ope(a,aa,1); //求逆序数
42 }
43 printf("%I64dn",res);
44 }
45 return 0;
46 }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
- PHP 枚举类型的管理与设计知识点总结
- Linux静态链接库使用类模板的快速排序算法
- TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
- php post换行的方法
- apache实现部署多个网站(一个ip部署多域名)的方法详解
- windows7 32、64位下python爬虫框架scrapy环境的搭建方法
- python实现简单名片管理系统
- PHP7创建COOKIE和销毁COOKIE的实例方法
- PHP实现新型冠状病毒疫情实时图的实例
- 深入浅析Python2.x和3.x版本的主要区别
- 用户态进程如何得到虚拟地址对应的物理地址?
- Linux中利用grep命令如何检索文件内容详解
- laravel框架学习笔记之组件化开发实现方法
- PHP7创建销毁session的实例方法