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

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

题意:求Inversion后的最小逆序数 思路:用O(nlogn)复杂度求出最初逆序数后,就可以用O(1)的复杂度分别递推出其他解 线段树功能:update:单点增减 query:区间求和 这里做了一点修改,就是,把操作抽象出来了。 详细请见代码:
View Code
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 using namespace std;10 #define lson l , m , rt << 111 #define rson m + 1 , r , rt << 1 | 112 const int maxn = 5500;13 int sum[maxn<<2];14 int n;15 16 int operate(int a,int b){17 return a+b;18 }19 20 21 void PushUp(int rt){22 sum[rt]=operate(sum[rt<<1],sum[rt<<1|1]);23 }24 25 void bulid(int l=1,int r=n,int rt=1){26 if(l==r){27 sum[rt]=0;return ;28 }29 int m=(l+r)>>1;30 bulid(lson);31 bulid(rson);32 PushUp(rt);33 }34 35 void update(int p,int add=1,int l=1,int r=n,int rt=1){36 if(l==r){37 sum[rt]+=add;return ;38 }39 int m=(l+r)>>1;40 if(p<=m)update(p,add,lson);41 else update(p,add,rson);42 PushUp(rt);43 }44 45 int query(int L,int R,int l=1,int r=n,int rt=1){46 if(L<=l && r<=R){47 return sum[rt];48 }49 int m=(l+r)>>1;50 int ans=0;51 if(L<=m)ans=operate(ans,query(L,R,lson));52 if(R> m)ans=operate(ans,query(L,R,rson));53 return ans;54 }55 56 57 int main(){58 59 int tmp[maxn];60 while(~scanf("%d",&n)){61 bulid();62 int sum=0;63 for(int i=0;i

 

 

转载于:https://www.cnblogs.com/tiankonguse/archive/2012/07/26/2609755.html

你可能感兴趣的文章
负载均衡lvs 解析
查看>>
Centos6.4系统文件服务之VSFTP
查看>>
Java网络编程之非阻塞I/O服务器TCP实例
查看>>
Windows Server 2012 Hyper-V故障转移集群虚拟机亲和性策略
查看>>
python获取当前日期前后N天或N月的日期
查看>>
mysql系列之复制1----原理篇
查看>>
CCNP精粹系列之三十二--BGP下一跳问题,推荐
查看>>
详解JSP九个内置对象
查看>>
MySQL深入03-锁-事务-GTID
查看>>
Linux Kickstart无人值守安装(上)
查看>>
安装libpcap错误处理
查看>>
Effactive Java -- 对于所有对象都通用的方法
查看>>
Android 中文 API (101) —— AsyncTask
查看>>
Silverlight学习笔记之使用TranslateTransform控制对象位置
查看>>
在Web Application中集成CAS登录模块
查看>>
webApp路由控制-vue-router2.0
查看>>
PyQT实现扩展窗口,更多/隐藏
查看>>
阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON
查看>>
怎样使视图的标签是波浪形
查看>>
国际版本Office365与国内版本office365的功能介绍
查看>>