HDU 4262 Juggler
初步想法是模拟,找到下一个位置并记录操作数,O(n^2)肯定会超时。
那么进行优化,会发现到下一位置的操作数就是两个位置之间存在的数的个数,于是就变成了计数问题。
不难想到用树状数组或线段树进行计数,时间复杂度O(nlogn)。
#include<cstdio>
#include<algorithm>
#include<vector>
#include<queue>
#include<string.h>
using namespace std;
const int Nmax=;
int n,now;
long long ans;
int num[Nmax],pos[Nmax];
int c[Nmax]; int lowbit(int x)
{
return x&(-x);
} int get_sum(int x)
{
int ans=;
while(x)
ans+=c[x],x-=lowbit(x);
return ans;
} int query(int l,int r)
{
return get_sum(r)-get_sum(l-);
} void update(int p,int add)
{
while(p<=n)
c[p]+=add,p+=lowbit(p);
} void build()
{
for(int i=;i<=n;i++)
c[i]=;
for(int i=;i<=n;i++)
update(i,);
} int main()
{
freopen("in.in","r",stdin);
while(scanf("%d",&n) && n!=)
{
for(int i=;i<=n;i++)
{
scanf("%d",&num[i]);
pos[num[i]]=i;
}
build();
now=,ans=;
for(int i=;i<=n;i++)
{
if(pos[i]>now)
ans+=min(query(now,pos[i]),query(,now)+query(pos[i],n)); else if(pos[i]<now)
ans+=min(query(pos[i],now),query(now,n)+query(,pos[i]));
else
ans++; now=pos[i],update(pos[i],-),num[pos[i]]=;
if(i==n)
break;
while(!num[now])
now=now%n+;
}
printf("%lld\n",ans); }
return ;
}
HDU 4262 Juggler的更多相关文章
- HDU 4262 Juggler 树状数组
将每个球按输入顺序编号,建立 它第几个被扔掉->编号 的映射关系. 记录当前在手里的球的编号,按扔掉的顺序查找这个球的编号,看看这个球是逆时针转到手里更近还是顺时针转到手里更近,即当前扔掉球的编 ...
- hdu 4262(线段树)
题目:有一个圈,可以从某个位置取球,给出原有的顺序,有三种操作,左旋一次,右旋一次,取球,要求按顺序取球,问需要操作多少次 显然操作是确定的,每次将目标球旋转过来,找出左旋和右旋操作少的,然后取球. ...
- BNUOJ 26228 Juggler
Juggler Time Limit: 3000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 42 ...
- HDU 4426 Palindromic Substring
Palindromic Substring Time Limit: 10000ms Memory Limit: 65536KB This problem will be judged on HDU. ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
随机推荐
- C#基础知识回顾--线程传参
C#基础知识回顾--线程传参 在不传递参数情况下,一般大家都使用ThreadStart代理来连接执行函数,ThreadStart委托接收的函数不能有参数, 也不能有返回值.如果希望传递参数给执行函数, ...
- 10169 - Urn-ball Probabilities !
描述:有两个罐子,一个罐子里有一个红球,另一个罐子里有一个红球和一个白球,每次从两个罐子里各取一个球,然后在向每个罐子里各加一个白球,一次取到两个红球时就结束取球,求n次取球中至少一次为取球为红球的概 ...
- 更快的memcpy
更快的memcpy 写代码有时候和笃信宗教一样,一旦信仰崩溃,是最难受的事情.早年我读过云风的一篇<VC 对 memcpy 的优化>,以及<Efficiency geek 2: co ...
- 谷歌、flick网站图片 一次性下载 javaWeb项目 多线程下载,
源码下载:http://download.csdn.net/detail/liangrui1988/5760473
- DEV 打印gridcontrl
private void PrintPreview(DevExpress.XtraPrinting.IPrintable gridControlPrint) { ...
- 如何编译Apache Hadoop2.2.0源代码
转自(原文图片已丢失,本文修复图片,重新排版,并更正部分原文错误):http://www.superwu.cn/2013/12/26/913 欢迎和大家交流技术相关问题: 邮箱: jiangxinnj ...
- phpwamp单身狗模式的详解与分析,单身狗模式/即霸体模式的作用讲解。
最近有学生在使用PHPWAMP的时候,问我霸体模式的作用. 学生问:老师,PHPWAMP里面的霸体模式是什么意思,有什么用? 回答:额...就是以前我发布测试版的时候,模式切换里面的单身狗模式. 学生 ...
- SDN理解:目录
为什么? 最近一直在学习SDN方面的知识,本着"最好的学习就是分享"的精神,记录下本系列的文章,尝试更好地去理解SDN这一正当红的技术. 如何? SDN领域现在已经充斥了大量的公司 ...
- oracle_index的建立、修改、删除
索引索引是关系数据库中用于存放每一条记录的一种对象,主要目的是加快数据的读取速度和完整性检查.建立索引是一项技术性要求高的工作.一般在数据库设计阶段的与数据库结构一道考虑.应用系统的性能直接与索引的合 ...
- 循序渐进看Java web日志跟踪(1)-Tomcat 日志追踪与配置
日志,是软件运行过程中,对各类操作中重要信息的记录. 日志跟踪,不管对于怎么样的项目来说,都是非常重要的一部分,它关系到项目后期的维护和排错,起着举足轻重的作用.项目开发过程中,对日志的记录规则,也将 ...