题目:有一个圈,可以从某个位置取球,给出原有的顺序,有三种操作,左旋一次,右旋一次,取球,要求按顺序取球,问需要操作多少次

显然操作是确定的,每次将目标球旋转过来,找出左旋和右旋操作少的,然后取球。

每次旋转后相对距离不变,每次记录某个区间删掉了多少,就可以查询了。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7. #define lson l, m, rt<<1
  8. #define rson m + 1, r, rt<<1|1
  9. typedef long long ll;
  10. const int maxn = 1e5 + ;
  11. int n, pos[maxn], sum[maxn << ];
  12. ll ans;
  13. void update(int p, int l, int r, int rt){
  14. sum[rt]++;
  15. if (l == r) return;
  16. int m = (l + r) >> ;
  17. if (p <= m) update(p, lson);
  18. else update(p, rson);
  19. }
  20. int query(int L, int R, int l, int r, int rt){
  21. if (L > R) return ;
  22. if (L <= l && R >= r){
  23. return sum[rt];
  24. }
  25. int m = (l + r) >> ;
  26. int ret = ;
  27. if (L <= m) ret += query(L, R, lson);
  28. if (R > m) ret += query(L, R, rson);
  29. return ret;
  30. }
  31. int main(){
  32. int x;
  33. while (~scanf("%d", &n) && n){
  34. ans = ;
  35. memset(sum, , sizeof(sum));
  36. for (int i = ; i < n; ++i){
  37. scanf("%d", &x);
  38. pos[x] = i + ;
  39. }
  40. int pre = , q, c, lx, rx;
  41. for (int i = ; i <= n; ++i){
  42. x = pos[i];
  43. if (x > pre){
  44. q = query(pre + , x, , n, );
  45. lx = x - pre - - q;
  46. rx = n - i + - lx;
  47. }
  48. else{
  49. q = query(x + , pre - , , n, );
  50. rx = pre - x - q;
  51. lx = n - i + - rx;
  52. }
  53. //cout << " lx = " << lx << " rx = " << rx << endl;
  54. //int lx = x - 1 - query(1, x - 1, 1, n, 1);
  55. //int rx = n - x + 1 - query(x + 1, n, 1, n, 1);
  56. ans += min(lx, rx) + ;
  57. pre = x;
  58. update(x, , n, );
  59. }
  60. printf("%lld\n", ans);
  61. }
  62. return ;
  63. }

hdu 4262(线段树)的更多相关文章

  1. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  2. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  4. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  6. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  7. hdu 2871 线段树(各种操作)

    Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  8. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  9. hdu 1542 线段树扫描(面积)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

随机推荐

  1. docker集群——Mesos集群下的负载均衡marathon-lb

    前面的章节介绍了Mesos+Zookeeper+Marathon的Docker管理平台,接下来介绍如何在该平台下构建负载均衡. 默认情况下,mesos marathon会把app发布到随机节点的随机端 ...

  2. 倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 CS说明

    虚拟仿真上,要注意仿真只是为了可视化,可以看到数据的变动是否和实际一致,所以Robot2D才是主要因素,虚拟仿真采集机器人的关节位置或者TCP位置来显示而已,为了测试一些别的算法,我们还可以在虚拟仿真 ...

  3. IFrame和Ajax比較

    说到比較,可能我是须要把这连个东西都给大家介绍一下的,可是介于大家都已经有了非常多的理解.我就简单的说了. Ajax:             是指一种创建交互式网页应用的网页开发技术.主要是利用Xm ...

  4. codeforces #550D Regular Bridge 构造

    题目大意:给定k(1≤k≤100),要求构造一张简单无向连通图,使得存在一个桥,且每一个点的度数都为k k为偶数时无解 证明: 将这个图缩边双,能够得到一棵树 那么一定存在一个叶节点,仅仅连接一条桥边 ...

  5. Quartz的cron表达式 (spring定时器 crontab)

    http://tangshuo.iteye.com/blog/184824 表达式位数最少六位,如每天凌晨一点启动:"0 0 1 * * ?" 顺序按   秒 分 时 日期 月份 ...

  6. DNS的概念,用途,DNS查询的实现算法

    1.DNS的概念,用途      DNS是由解析器以及域名服务器组成的.      域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器.      DNS ...

  7. Redis之最大内存置换策略

    0.前言 Redis默认最大内存大小是应用程序可访问的内存大小, 32位windows下是2GB, linux下是3GB. 64位下可以访问的内存为2^64字节, Redis提供了maxmemory字 ...

  8. FileNotFoundException: http:\localhos46087125.jpg (文件名、目录名或卷标语法不正确

    java.io.FileNotFoundException: http:\localhost:8080\ipms\upload\1332146087125.jpg (文件名.目录名或卷标语法不正确.) ...

  9. android动画具体解释二 属性动画原理

    property动画是一个强大的框架,它差点儿能使你动画不论什么东西. 你能够定义一个动画来改变对象的不论什么属性,不论其是否被绘制于屏幕之上. 一个属性动画在一定时间内多次改变一个属性(对象的一个字 ...

  10. Codeforces Round #277 (Div. 2)---A. Calculating Function (规律)

    Calculating Function time limit per test 1 second memory limit per test 256 megabytes input standard ...