HDU 4262 Juggler (模拟+线段树优化)
转载请注明出处,谢谢http://blog.csdn.net/acm_cxlove/article/details/7854526 by---cxlove
http://acm.hdu.edu.cn/showproblem.php?pid=4262
题目:有一个圈,可以从某个位置取球,给出原有的顺序,有三种操作,左旋一次,右旋一次,取球,要求按顺序取球,问需要操作多少次
显然操作是确定的,每次将目标球旋转过来,找出左旋和右旋操作少的,然后取球。
比较麻烦的是,每次有的球取走了,不知道左旋和右旋需要多少次操作,开始直接STL查找,由于是无序的,O(N)的查找必然超时。
#include <cstdio>
#include <cstring>
#include <iostream>
#include<vector>
#include<algorithm>
#define N 100005
#define pb(a) push_back(a)
#define LL long long
#define lson step<<1
#define rson step<<1|1
using namespace std;
struct Node{int left,right,mid;int num;
}L[N*5];
void Bulid(int step,int l,int r){L[step].left=l;L[step].right=r;L[step].mid=(l+r)/2;L[step].num=0;if(l==r) return;Bulid(lson,l,L[step].mid);Bulid(rson,L[step].mid+1,r);
}
void update(int step,int pos){L[step].num++;if(L[step].left==L[step].right) return;if(pos<=L[step].mid) update(lson,pos);else update(rson,pos);
}
int query(int step,int l,int r){if(L[step].left==l&&L[step].right==r) return L[step].num;if(r<=L[step].mid) return query(lson,l,r);else if(l>L[step].mid) return query(rson,l,r);else return query(lson,l,L[step].mid)+query(rson,L[step].mid+1,r);
}
int a[N],b[N];
int main(){int n,k;while(scanf("%d",&n)!=EOF&&n){int pos=1;Bulid(1,1,n);for(int i=1;i<=n;i++) {scanf("%d",&a[i]);b[a[i]]=i;}LL ans=n;if(b[1]!=1) ans+=min(b[1]-1,n-b[1]+1);pos=b[1];update(1,b[1]);for(int i=2;i<=n;i++){int c,d;if(pos<b[i]) {d=query(1,pos+1,b[i]);c=b[i]-pos-d-1;}else {d=query(1,b[i],pos-1);c=pos-b[i]-d;}ans+=min(c,n-i+1-c);pos=b[i];update(1,b[i]);}printf("%I64d\n",ans);}return 0;
}
HDU 4262 Juggler (模拟+线段树优化)相关推荐
- hdu 4391 Paint The Wall 线段树 +优化 2012 Multi-University Training Contest 10 )
http://acm.hdu.edu.cn/showproblem.php?pid=4391 题意: 刷墙, 以开始 有 n个节点,每个节点有一种颜色 ,m 次询问 m次 输入 a,l,r,z 如果 ...
- hdu 4521(线段树优化dp)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Pro ...
- CF786B Legacy(线段树优化建边模板 + 最短路)
整理的算法模板合集: ACM模板 目录 线段树优化建边 题目传送门 由于本题的数据达到了1e5,所以如果直接全部暴力连边的话会达到O(n2)O(n^2)O(n2),时间包括内存都受不了.因此我们需要使 ...
- P1047 校门外的树(线段树优化)(校门三部曲)难度⭐⭐
校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...
- string [线段树优化桶排]
题意大概是给你一个字符串,1e5次修改,每次给一个区间升序排列或降序排列,最后输出这个字符串; 其实是个挺裸的线段树优化题;但是我没有意识去结合桶排,扑该..... 首先 1.40分算法 O(NMlo ...
- BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)
BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...
- UOJ#77. A+B Problem [可持久化线段树优化建边 最小割]
UOJ#77. A+B Problem 题意:自己看 接触过线段树优化建图后思路不难想,细节要处理好 乱建图无果后想到最小割 白色和黑色只能选一个,割掉一个就行了 之前选白色必须额外割掉一个p[i], ...
- hdu5489 Removed Interval dp+线段树优化
现在看这题居然直接秒了...去年看的时候还以为神题.. 设以第i项为结尾的lis前缀为f[i],以第j项为结尾的lis后缀为g[i],如果求出f[i]和g[j],然后枚举i,快速找到最大的满足a[j] ...
- 【CF1045A】A Last chance【贪心】【线段树优化建图】【网络流构造方案】
题意:有nnn个武器和mmm个飞船,武器有下面三种 从给定的集合SSS中击破一个. 在给定的区间[L,R][L,R][L,R]中击破一个. 对于给定的a,b,ca,b,ca,b,c,选择000个或22 ...
最新文章
- 写python的c扩展简介
- tortoisesvn创建部署项目_FrameWork如何进行云托管部署
- OpenGL 视图和颜色的概念
- jenkins修改pom文件_DevOps实践:Jenkins与Nexus制品库集成
- 1342.将数字变成0的操作次数
- (附源码)php小型网络舆情平台设计的开发毕业设计252324
- vue css下载字体并引入使用
- linux编译安装openssl-3.0.2
- python自回归模型_21向量自回归模型
- 时间序列分析 23 DTW (时序相似度度量算法) 上
- arm模拟器手机版_在 Android 模拟器上运行 ARM 应用
- 内网通过映射后的公网IP访问内网服务测试--ASA842 hairpin NAT测试
- 立创EDA网页标准版元件多太卡解决方法
- 从360遇上苹果说起
- 计算机游戏本和商务本的区别,商务本和游戏本有什么区别
- python办公自动化模块_Python自动化办公Excel模块openpyxl原理及用法解析
- android Wifi自动连接
- 关于GPS 坐标系的那些事
- ORB_SLAM2源码阅读(三)相机定位
- android中的长按复制
热门文章
- Java synchronized偏向锁、轻量级锁、重量级锁
- python try/except与try/finally使用
- 【论文阅读】三.基于智能网联车的信号交叉口更易受到拥堵型攻击
- 计算机9针485接口,RS485是九针的插口,而实际上里面只能两根线是有用的,其它的七根线则无作用,那为什么弄九针呢?-工业支持中心-西门子中国...
- Android融云会话及会话列表的实现
- 神经网络(二):Softmax函数与多元逻辑回归
- Linux系统之DNS解析
- bigquery_Google的BigQuery提供免费访问GDELT的权限
- 求1到100之间的质数(素数)?
- LYL程序员小白的理解之简单易懂的Arduino的串口通讯