hdu_1394,线段树求逆序数
来源:互联网 发布:电脑系统优化 编辑:程序博客网 时间:2024/05/18 21:12
http://www.notonlysuccess.com/index.php/segment-tree-complete/
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;const int maxn=5555;int sum[maxn<<2];int seq[maxn];void pushUp(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt){ if(r==l) { sum[rt]=0; return; } int m=(r+l)>>1; build(lson); build(rson);}void update(int L,int d,int l,int r,int rt){ if(l==r) { sum[rt]=d; return; } int m=(r+l)>>1; if(L<=m) update(L,d,lson); else update(L,d,rson); pushUp(rt);}int query(int L,int R,int l,int r,int rt){ int ret=0; if(L<=l&&r<=R){return sum[rt];} int m=(l+r)>>1; if(L<=m) ret+=query(L,R,lson); if(R>m) ret+=query(L,R,rson); return ret;}int main(){ int n; while(scanf("%d",&n)!=EOF) { int ans=0; memset(sum,0,sizeof(sum)); build(0,n-1,1); memset(seq,0,sizeof(seq)); for(int i=0;i<n;i++) { scanf("%d",&seq[i]); ans+=i-query(0,seq[i],0,n-1,1); //cout<<ans<<" "; //cout<<endl; update(seq[i],1,0,n-1,1); } int cur=ans; for(int i=0;i<n;i++) { cur+=n-seq[i]*2-1; ans=min(ans,cur); } cout<<ans<<endl; } return 0;}
0 0
- hdu_1394,线段树求逆序数
- 线段树---求逆序数
- 线段树求逆序数
- 线段树--求逆序数
- 归并求逆序数 树状数组求逆序数 线段树求逆序数
- hdu 1394(线段树求逆序数)
- 线段树求逆序数 hdu1394
- HDU1394用线段树求逆序数
- hdu 1394 线段树 求逆序数
- 线段树求逆序数(单点更新)
- poj2299-------------线段树求逆序数
- hdu 1394 线段树求逆序数
- hdu1394 线段树求最小逆序数
- hdu1394(线段树求逆序数)
- 线段树求逆序数hdu1394
- hdu 1394 线段树求逆序数
- HDU 1394 线段树求逆序数
- nyoj117 求逆序数【线段树】
- 【从源代码看Android】05 PendingIntent
- Reorder List
- LRU Cache
- Java的8大排序的基本思想及实例解读
- Geohash算法
- hdu_1394,线段树求逆序数
- 安卓android显示菜单(4.0以上系统也可以显示)
- Spring3.x--Aop
- javah 用法
- UVA 11747 - Heavy Cycle Edges(MST)
- 请别再拿“String s = new String("xyz");创建了多少个String实例”来面试了吧
- shell排序C实现
- 用Gvim建立IDE编程环境(最详细,最适合初学者)
- java base64 转码和解码