[题目链接]

http://acm.hdu.edu.cn/showproblem.php?pid=6318

[算法]

线段树 / 树状数组

[代码]

#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010 long long i,n,x,y,len,ans,l,r,mid;
long long a[MAXN],rk[MAXN],tmp[MAXN]; struct SegmentTree
{
struct Node
{
long long l,r;
long long sum;
} Tree[MAXN << ];
inline void build(long long index,long long l,long long r)
{
long long mid;
Tree[index].l = l;
Tree[index].r = r;
Tree[index].sum = ;
if (l == r) return;
mid = (l + r) >> ;
build(index << ,l,mid);
build(index << | ,mid + ,r);
}
inline void add(long long index,long long pos,long long val)
{
long long mid;
Tree[index].sum += val;
if (Tree[index].l == Tree[index].r) return;
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= pos) add(index << ,pos,val);
else add(index << | ,pos,val);
}
inline long long query(long long index,long long l,long long r)
{
long long mid;
if (l > r) return ;
if (Tree[index].l == l && Tree[index].r == r) return Tree[index].sum;
mid = (Tree[index].l + Tree[index].r) >> ;
if (mid >= r) return query(index << ,l,r);
else if (mid + <= l) return query(index << | ,l,r);
else return query(index << ,l,mid) + query(index << | ,mid + ,r);
}
} T; int main()
{ while (scanf("%lld%lld%lld",&n,&x,&y) != EOF)
{
for (i = ; i <= n; i++)
{
scanf("%lld",&a[i]);
tmp[i] = a[i];
}
sort(tmp + ,tmp + n + ,greater<int>());
len = ;
for (i = ; i <= n; i++)
{
if (tmp[i] != tmp[i - ])
tmp[++len] = tmp[i];
}
for (i = ; i <= n; i++)
{
l = ; r = len;
while (l <= r)
{
mid = (l + r) >> ;
if (a[i] >= tmp[mid]) r = mid - ;
else l = mid + ;
}
rk[i] = l;
}
T.build(,,len);
ans = ;
for (i = ; i <= n; i++)
{
ans += T.query(,,rk[i] - );
T.add(,rk[i],);
}
printf("%lld\n",1ll * ans * min(x,y));
}
return ; }

[HDU 6318] Swaps and Inversions的更多相关文章

  1. HDU 6318 Swaps and Inversions 思路很巧妙!!!(转换为树状数组或者归并求解逆序数)

    Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  2. hdu 6318 Swaps and Inversions (线段树求逆序对数)

    Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an ...

  4. HDU 6318 Swaps and Inversions(归并排序 || 树状数组)题解

    题意:一个逆序对罚钱x元,现在给你交换的机会,每交换任意相邻两个数花钱y,问你最少付多少钱 思路:最近在补之前还没过的题,发现了这道多校的题.显然,交换相邻两个数逆序对必然会变化+1或者-1,那我们肯 ...

  5. HDU 6318.Swaps and Inversions-求逆序对-线段树 or 归并排序 or 离散化+树状数组 (2018 Multi-University Training Contest 2 1010)

    6318.Swaps and Inversions 这个题就是找逆序对,然后逆序对数*min(x,y)就可以了. 官方题解:注意到逆序对=交换相邻需要交换的次数,那么输出 逆序对个数 即可. 求逆序对 ...

  6. HDU 多校对抗赛第二场 1010 Swaps and Inversions

    Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  7. Swaps and Inversions HDU - 6318 树状数组+离散化

    #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...

  8. hdu 6318

    Long long ago, there was an integer sequence a.Tonyfang think this sequence is messy, so he will cou ...

  9. 【HDOJ6318】Swaps and Inversions(树状数组)

    题意: 给定一串数组,其中含有一个逆序对则需要花费x,交换相邻两个数需要花费y,输出最小花费. n<=1e5,-1e9<=a[i]<=1e9 思路: #include<cstd ...

随机推荐

  1. 努比亚(nubia) V18 NX612J 解锁BootLoader 并刷入recovery ROOT

    recovery制作来自绯色玻璃 努比亚(nubia) V18 NX612J 解锁BootLoader 并刷入recovery ROOT 工具下载链接:https://pan.baidu.com/s/ ...

  2. 【PostgreSQL-9.6.3】创建、修改、删除数据库

    1.创建数据库 create database database_name; 2.修改数据库的名称 alter database database_name rename to new_databas ...

  3. 时序分析:KMP算法用于序列识别

    考研基础资料之一的<算法与数据结构>,KMP算法作为串匹配的基本算法,为必考题目之一.对于算法入门来说,也是复杂度稍高的一个基本算法. KMP算法作为串匹配的非暴力算法,是为了减少回溯而设 ...

  4. html 图片翻转

    var Lb = false; var Ub = false; function rotate(obj) { if (obj == "L") { if (Lb == false) ...

  5. javaee IO流复制的方法

    package Zjshuchu; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileN ...

  6. linux中tomcat启动脚本:关闭、发布、重启、测试是否成功

    说明 在使用jenkins持续集成时,需要实现自动发布包到tomcat.该脚本实现了在jenkins将包发送到linux服务器上后的自动关闭.发布.启动.测试启动是否成功的过程 思路 该思路以tomc ...

  7. 部署国密SSL证书,如何兼容国际主流浏览器?

    国密算法在主流操作系统.浏览器等客户端中,还没有实现广泛兼容.因此,在面向开放互联网的产品应用中,国密算法无法得到广泛应用.比如,在SSL证书应用领域,由于国际主流浏览器不信任国密算法,如果服务器部署 ...

  8. Linux 性能检查命令总结

    iostat -x 1 查看磁盘的IO负载 Linux系统出现了性能问题,一般我们可以通过top.iostat,vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据 ...

  9. S-HR界面控件赋值取值

    属性值: this.getField("entrys.variationReason").shrPromptBox("getValue").name

  10. html第三节课

    表单 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...