博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asia Yokohama Regional Contest 2018 G题 What Goes Up Must Come Down(树状数组求逆序对)
阅读量:5951 次
发布时间:2019-06-19

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

题意:

  给一个数组大小不超过1e5,每个数的值也是1e5以内,可以交换相邻两个数,求保证它呈现一个非递减再非递增的趋势的最小交换次数。

 
题解:
  对每个数来说,只有两种情况,要么参与非递减部分要么参与非递增部分,对于前者它要移的次数就是在它之前与他构成的逆序对数,对于后者它要移的次数就是在它之后与他构成的逆序对数,那我们取较小的加入到答案就做完了。
#define bug(x,y) cout<<"i="<
<<": "<
<
#define itor ::iteratorusing namespace std;typedef long long ll;typedef pair
P;#define pb push_back#define se second#define fi first#define rs o*2+1#define ls o*2const int N=1e5+5;int n;int c[N];int low(int x){ return x&(-x);}void add(int x,int y){ while(x
v[N];int main(){ scanf("%d",&n); ll ans=0; for(int i=1;i<=n;i++){ int x; scanf("%d",&x); v[x].pb(i); add(i,1); } for(int i=1;i

 

 

转载于:https://www.cnblogs.com/ccsu-kid/p/10599346.html

你可能感兴趣的文章
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
sed处理文本
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Parallels Desktop12推出 新增Parallels Toolbox
查看>>
Python高效编程技巧
查看>>