博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1394 Minimum Inversion Number
阅读量:4681 次
发布时间:2019-06-09

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

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

1 #include 
2 #include
3 #include
4 #define maxn 50000 5 using namespace std; 6 7 struct node 8 { 9 int l,r;10 int ans;11 }tree[maxn*4];12 13 void build(int i,int l,int r)14 {15 tree[i].l=l;tree[i].r=r;16 tree[i].ans=0;17 if(l==r) return ;18 int mid=(l+r)>>1;19 build(i<<1,l,mid);20 build(i<<1|1,mid+1,r);21 }22 23 int search1(int i,int l,int r)24 {25 if(tree[i].l==l&&tree[i].r==r)26 {27 return tree[i].ans;28 }29 int mid=(tree[i].l+tree[i].r)>>1;30 if(r<=mid)31 {32 return search1(i<<1,l,r);33 }34 else if(l>mid)35 {36 return search1(i<<1|1,l,r);37 }38 else39 {40 return search1(i<<1,l,mid)+search1(i<<1|1,mid+1,r);41 }42 }43 44 void update(int i,int c)45 {46 tree[i].ans++;47 if(tree[i].l==tree[i].r) return ;48 int mid=(tree[i].l+tree[i].r)>>1;49 if(c<=mid)50 {51 update(i<<1,c);52 }53 else54 {55 update(i<<1|1,c);56 }57 }58 59 int main()60 {61 int a[maxn],n;62 while(scanf("%d",&n)!=EOF)63 {64 build(1,0,n-1);65 int sum=0;66 for(int i=1; i<=n; i++)67 {68 scanf("%d",&a[i]);69 sum+=search1(1,a[i],n-1);70 update(1,a[i]);71 }72 int cc=sum;73 for(int i=1; i<=n; i++)74 {75 sum+=(-a[i]+n-a[i]-1);76 cc=min(cc,sum);77 }78 printf("%d\n",cc);79 }80 return 0;81 }
View Code

 

转载于:https://www.cnblogs.com/fanminghui/p/3579193.html

你可能感兴趣的文章
让历史告诉我们未来
查看>>
UVa540 Team Queue
查看>>
android 练习之路 (八)
查看>>
tp5 中 model 的聚合查询
查看>>
android wear开发之:增加可穿戴设备功能到通知中 - Adding Wearable Features to Notifications...
查看>>
压缩文件函数库(转载)
查看>>
【转】ubuntu12.04没有/var/log/messages解决
查看>>
Oracle EBS 初始化用户密码
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
函数的复写
查看>>
17_重入锁ReentrantLock
查看>>
winform窗口关闭提示
查看>>
64款工具,总有合适您的那款
查看>>
我的第一篇博客
查看>>
大数据学习线路整理
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
关于ProjectServer定制化项目中心页面
查看>>
使用Collectd + InfluxDB + Grafana进行JMX监控
查看>>
Linux下tar,zip命令详解
查看>>