倒着插,倒着插,这道题是倒着插!

想一下如果 Posi 里面有若干个0,那么排在最前面的一定是最后一个0.

从后往前看,对于第i个数,就应该插在第Posi + 1个空位上,所以用线段树来维护区间空位的个数。

说一下那个坑爹的第56行的判断:

if(i > 1) printf(" ");

将输出的n个数用空格隔开,我感觉这是一个还算常用的写法啊,结果各种莫名TLE,加上输入挂也补救不回来。

去掉这个无谓的判断后,3594MS险过,加上输入挂3094MS,还算是起到了一定的加速作用。

  1. #include <cstdio>
  2. #include <ctype.h>
  3.  
  4. const int maxn = + ;
  5.  
  6. int n, p[maxn], v[maxn], a[maxn];
  7. int sum[maxn << ];
  8.  
  9. inline int Scan()
  10. {
  11. char c = getchar();
  12. while(!isdigit(c)) c = getchar();
  13.  
  14. int x = ;
  15. while(isdigit(c)) {
  16. x = x * + c - '';
  17. c = getchar();
  18. }
  19. return x;
  20. }
  21.  
  22. void build(int o, int L, int R)
  23. {
  24. if(L == R) { sum[o] = ; return; }
  25. int M = (L + R) / ;
  26. build(o<<, L, M);
  27. build(o<<|, M+, R);
  28. sum[o] = sum[o<<] + sum[o<<|];
  29. }
  30.  
  31. void update(int o, int L, int R, int p, int v)
  32. {
  33. if(L == R) { sum[o] = ; a[L] = v; return; }
  34. int M = (L + R) / ;
  35. if(sum[o<<] >= p) update(o<<, L, M, p, v);
  36. else update(o<<|, M+, R, p-sum[o<<], v);
  37. sum[o] = sum[o<<] + sum[o<<|];
  38. }
  39.  
  40. int main()
  41. {
  42. //freopen("in.txt", "r", stdin);
  43.  
  44. while(scanf("%d", &n) == )
  45. {
  46. build(, , n);
  47. for(int i = ; i < n; i++)
  48. {
  49. p[i] = Scan();
  50. v[i] = Scan();
  51. }
  52. for(int i = n - ; i >= ; i--) update(, , n, p[i]+, v[i]);
  53. printf("%d", a[]);
  54. for(int i = ; i <= n; i++)
  55. {
  56. //if(i > 1) printf(" ");
  57. printf(" %d", a[i]);
  58. }
  59. printf("\n");
  60. }
  61.  
  62. return ;
  63. }

代码君

POJ 2828 (线段树 单点更新) Buy Tickets的更多相关文章

  1. poj 2828(线段树单点更新)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 18561   Accepted: 9209 Desc ...

  2. POJ 2828 线段树单点更新 离线搞

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  3. POJ 2886 线段树单点更新

    转载自:http://blog.csdn.net/sdj222555/article/details/6878651 反素数拓展参照:http://blog.csdn.net/ACdreamers/a ...

  4. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)

    题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...

  5. POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10575   Accepted: 5489 Descrip ...

  6. POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)

    POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...

  7. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  8. HDU 1754 I Hate It 线段树单点更新求最大值

    题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...

  9. HDU 1166 敌兵布阵(线段树单点更新)

    敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...

随机推荐

  1. JQuery拾遗

    1.关于JQuery的animate,可以操作background么? 答:如果是单纯的JQuery不可以,需要引入JQuery的ui核心库.否则只支持宽高.透明度.上下左右位置的变化. 2.能否说一 ...

  2. PHP命名空间(Namespace)

    http://www.jb51.net/article/36389.htm 字符串形式的动态调用方式 //魔法常量__NAMESPACE__的值是当前空间名称 //可以组合成字符串并调用 $comme ...

  3. [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题

    发布日期:2009.12.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码 ...

  4. mysql之select(一)

    select 初始准备工作: 1.建木瓜库并选中 create database mugua; use mugua; 2.创建商品表.栏目表.品牌表 create table goods ( good ...

  5. Spring学习总结(0)——Spring详解

    一:spring的基本用法: 1,关于spring容器: spring容器是Spring的核心,该 容器负责管理spring中的java组件, ApplicationContext ctx  = ne ...

  6. 使用原生JavaScript

    如果你只需要针对现代浏览器,很多功能使用原生的 JavaScript 就可以实现. DOM Selectors //jQuery var ele = $("#id .class") ...

  7. JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space

    在Intellij开发工具中编译JAVA项目,出现以下错误: 六月 21, 2016 6:28:07 下午 org.apache.tomcat.util.modeler.BaseModelMBean ...

  8. 305. Number of Islands II

    题目: A 2d grid map of m rows and n columns is initially filled with water. We may perform an addLand  ...

  9. android调试工具DDMS

    DDMS工作机制    DDMS全称Dalvik Debug Monitor Service.DDMS为IDE和emultor及真正的android设备架起来了一座桥梁,Android DDMS将捕捉 ...

  10. Java Map各遍历方式的性能比较

    1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的 ...