传送门

题目大意:给一段空序列,每次向序列中某一个位置插入一个数,插入的位置后面所有数相应后移。

这个题比较令人头疼的是后移操作,我们不可能大面积后移。那怎么办呢?后面的人对前面有影响,那我们能不能通过离线方法,使得它变成没有影响的状态?

可以的。我们可以把输入离线,然后倒着插入。这样的话,这个数的pos在哪,他应该对应插入在第pos个空格的位置。注意本题序号从0开始,要加一。

这样就豁然开朗啦!!真是神奇的操作!

看一下代码。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#include<utility>
#include<map>
#define pr pair<int,int>
#define mp make_pair
#define fi first
#define sc second
#define rep(i,a,n) for(int i = a;i <= n;i++)
#define per(i,n,a) for(int i = n;i >= a;i--)
#define enter putchar('\n')
using namespace std;
typedef long long ll;
const int M = 200005;
const int N = 10000005;int read()
{int ans = 0,op = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') op = -1;ch = getchar();}while(ch >='0' && ch <= '9'){ans *= 10;ans += ch - '0';ch = getchar();}return ans * op;
}struct node
{int id,val;
}q[M];int n,sum[M<<2],a[M];void clear()
{memset(q,0,sizeof(q));memset(sum,0,sizeof(sum));
}void build(int p,int l,int r)
{if(l == r){sum[p] = 1;return;}int mid = (l+r) >> 1;build(p<<1,l,mid),build(p<<1|1,mid+1,r);sum[p] = sum[p<<1] + sum[p<<1|1];
}void modify(int p,int l,int r,int pos,int val)
{if(l == r){a[l] = val,sum[p]--;return;}int mid = (l+r) >> 1;if(sum[p<<1] >= pos) modify(p<<1,l,mid,pos,val);else modify(p<<1|1,mid+1,r,pos-sum[p<<1],val);sum[p] = sum[p<<1] + sum[p<<1|1];
}int main()
{while(scanf("%d",&n) != EOF){build(1,1,n);rep(i,1,n) q[i].id = read() + 1,q[i].val = read();per(i,n,1) modify(1,1,n,q[i].id,q[i].val);rep(i,1,n) printf("%d ",a[i]);enter;}return 0;
}

转载于:https://www.cnblogs.com/captain1/p/9795207.html

POJ2828 Buy Ticket相关推荐

  1. POJ2828 Buy Tickeys 树状数组+二分 线段树留坑。。。

    题意:一堆人排队买票,告诉你一堆人的序号(序号的意思是插在"当前"第几个人的后面)和姓名(姓名用编号代替). 思路:线段树 或 树状数组+二分(自己还不会线段树,所以这里继续留坑) ...

  2. POJ2828 Buy Tickets【线段树,逆序遍历】

    刚开始看到题目,想用memmove偷懒,结果TLE,后来查了查,才发现用memmove也是O(n^2)的复杂度... #include <stdio.h> #include <str ...

  3. poj-2828 Buy Tickets ***

    线段树 //2828 View Code /* * [这段话转的..] * 如果我们从头开始一次做的话,无论是用链表还是数组,肯定会超时(链表寻址时间长,数组移位时间长.). * 所以要用一个快速的方 ...

  4. 100万人同时抢1万张火车票,极限并发带来的思考

    欢迎关注方志朋的博客,回复"666"获面试宝典 每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场 ...

  5. “12306” 是如何支撑百万 QPS 的?

    点击关注公众号,Java干货及时送达 12306抢票,极限并发带来的思考? 每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票!虽然现在大多数情况下都能订到票,但是放票瞬间即 ...

  6. 12306架构到底是不是国内最牛逼的架构

    12306 抢票,极限并发带来的思考 虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会. 尤其是春节期间,大家不仅使用 12306,还会考虑"智行"和其 ...

  7. 人群场景的属性--Deeply Learned Attributes for Crowded Scene Understandin

    Deeply Learned Attributes for Crowded Scene Understanding CVPR2015 http://www.ee.cuhk.edu.hk/~jshao/ ...

  8. 厉害了,12306 是如何顶住一秒百万流量的?

    作者:绘你一世倾 https://juejin.im/post/5d84e21f6fb9a06ac824814 每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票 12306 ...

  9. 【揭秘】12306是如何抗住几亿日活、百万级高并发的?

    [欢迎关注微信公众号:厦门微思网络] 微思网络(官网):https://www.xmws.cn/ 每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票! 虽然现在大多数情况下都 ...

最新文章

  1. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )
  2. 简单的openssh自动升级脚本
  3. 根据端口不同来切换站点_根据不同高温气体对窑炉的侵蚀,来选用相应的耐火材料...
  4. 去哪儿-13-city-vuex
  5. c语言和c 编程的区别吗,C语言和C有什么区别呀?
  6. oracle和mysql分组排序取第一条数据
  7. Bailan4142 二分法求函数的零点【二分法】
  8. vue string转date_进阶高级前端,这9种Vue技术你掌握了吗?
  9. Systrace分析app启动分析
  10. 橡胶柱压缩_橡胶=汽车半条命:浅谈ABAQUS橡胶大变形仿真5大注意事项
  11. 【NoteBook】莫瑞亚(Ash Maurya):精益创业实战(一、二部分)
  12. java动漫项目_狂拽酷炫diao炸天的开源动画项目:lottie-android,拿来就用!
  13. CTF主办方指南之对抗搅屎棍
  14. memcmp函数使用详解
  15. 学习——学习能力是最重要的能力
  16. 随机森林的构建过程(机器学习)
  17. 数据库中LIMIT和 OFFSET的理解
  18. Android闪退原因
  19. C语言 生产者消费者模型
  20. [免费专栏] Android安全之Android Fragment注入

热门文章

  1. Linux C 串口属性设置
  2. java 并发demo_《Java并发编程实践》中4.3.5章demo的一个疑问?
  3. 【计算机组成原理】多功能算数逻辑运算单元
  4. 『设计模式』我就要一个对象,你别给我这么多好不好!---单例模式
  5. 图论--二分图--二分图的定义及其判断定
  6. [机器学习] PMML实现模型上线
  7. strace命令用法
  8. Java的IO:BIO | NIO | AIO
  9. Docker认识、安装及使用(windows7)
  10. 莫烦Tensorflow教程(15~22)