POJ 2828 (线段树 单点更新) Buy Tickets
倒着插,倒着插,这道题是倒着插!
想一下如果 Posi 里面有若干个0,那么排在最前面的一定是最后一个0.
从后往前看,对于第i个数,就应该插在第Posi + 1个空位上,所以用线段树来维护区间空位的个数。
说一下那个坑爹的第56行的判断:
if(i > 1) printf(" ");
将输出的n个数用空格隔开,我感觉这是一个还算常用的写法啊,结果各种莫名TLE,加上输入挂也补救不回来。
去掉这个无谓的判断后,3594MS险过,加上输入挂3094MS,还算是起到了一定的加速作用。
- #include <cstdio>
- #include <ctype.h>
- const int maxn = + ;
- int n, p[maxn], v[maxn], a[maxn];
- int sum[maxn << ];
- inline int Scan()
- {
- char c = getchar();
- while(!isdigit(c)) c = getchar();
- int x = ;
- while(isdigit(c)) {
- x = x * + c - '';
- c = getchar();
- }
- return x;
- }
- void build(int o, int L, int R)
- {
- if(L == R) { sum[o] = ; return; }
- int M = (L + R) / ;
- build(o<<, L, M);
- build(o<<|, M+, R);
- sum[o] = sum[o<<] + sum[o<<|];
- }
- void update(int o, int L, int R, int p, int v)
- {
- if(L == R) { sum[o] = ; a[L] = v; return; }
- int M = (L + R) / ;
- if(sum[o<<] >= p) update(o<<, L, M, p, v);
- else update(o<<|, M+, R, p-sum[o<<], v);
- sum[o] = sum[o<<] + sum[o<<|];
- }
- int main()
- {
- //freopen("in.txt", "r", stdin);
- while(scanf("%d", &n) == )
- {
- build(, , n);
- for(int i = ; i < n; i++)
- {
- p[i] = Scan();
- v[i] = Scan();
- }
- for(int i = n - ; i >= ; i--) update(, , n, p[i]+, v[i]);
- printf("%d", a[]);
- for(int i = ; i <= n; i++)
- {
- //if(i > 1) printf(" ");
- printf(" %d", a[i]);
- }
- printf("\n");
- }
- return ;
- }
代码君
POJ 2828 (线段树 单点更新) Buy Tickets的更多相关文章
- poj 2828(线段树单点更新)
Buy Tickets Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 18561 Accepted: 9209 Desc ...
- POJ 2828 线段树单点更新 离线搞
Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...
- POJ 2886 线段树单点更新
转载自:http://blog.csdn.net/sdj222555/article/details/6878651 反素数拓展参照:http://blog.csdn.net/ACdreamers/a ...
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
题目链接 Description During the War of Resistance Against Japan, tunnel warfare was carried out extensiv ...
- POJ 1804 Brainman(5种解法,好题,【暴力】,【归并排序】,【线段树单点更新】,【树状数组】,【平衡树】)
Brainman Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 10575 Accepted: 5489 Descrip ...
- POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和)
POJ.3321 Apple Tree ( DFS序 线段树 单点更新 区间求和) 题意分析 卡卡屋前有一株苹果树,每年秋天,树上长了许多苹果.卡卡很喜欢苹果.树上有N个节点,卡卡给他们编号1到N,根 ...
- POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)
POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...
- HDU 1754 I Hate It 线段树单点更新求最大值
题目链接 线段树入门题,线段树单点更新求最大值问题. #include <iostream> #include <cstdio> #include <cmath> ...
- HDU 1166 敌兵布阵(线段树单点更新)
敌兵布阵 单点更新和区间更新还是有一些区别的,应该注意! [题目链接]敌兵布阵 [题目类型]线段树单点更新 &题意: 第一行一个整数T,表示有T组数据. 每组数据第一行一个正整数N(N< ...
随机推荐
- JQuery拾遗
1.关于JQuery的animate,可以操作background么? 答:如果是单纯的JQuery不可以,需要引入JQuery的ui核心库.否则只支持宽高.透明度.上下左右位置的变化. 2.能否说一 ...
- PHP命名空间(Namespace)
http://www.jb51.net/article/36389.htm 字符串形式的动态调用方式 //魔法常量__NAMESPACE__的值是当前空间名称 //可以组合成字符串并调用 $comme ...
- [你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题
发布日期:2009.12.29 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码 ...
- mysql之select(一)
select 初始准备工作: 1.建木瓜库并选中 create database mugua; use mugua; 2.创建商品表.栏目表.品牌表 create table goods ( good ...
- Spring学习总结(0)——Spring详解
一:spring的基本用法: 1,关于spring容器: spring容器是Spring的核心,该 容器负责管理spring中的java组件, ApplicationContext ctx = ne ...
- 使用原生JavaScript
如果你只需要针对现代浏览器,很多功能使用原生的 JavaScript 就可以实现. DOM Selectors //jQuery var ele = $("#id .class") ...
- JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space
在Intellij开发工具中编译JAVA项目,出现以下错误: 六月 21, 2016 6:28:07 下午 org.apache.tomcat.util.modeler.BaseModelMBean ...
- 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 ...
- android调试工具DDMS
DDMS工作机制 DDMS全称Dalvik Debug Monitor Service.DDMS为IDE和emultor及真正的android设备架起来了一座桥梁,Android DDMS将捕捉 ...
- Java Map各遍历方式的性能比较
1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的 ...