POJ 2828-程序员宅基地

技术标签: 算法  线段树  

POJ 2828 (单点修改 区间查询)

题目链接:POJ 2828

题意:

n个人,每个人不断地插入到队伍中。

输入a b表示号码为b的插入到第a个后面。


分析:

需要逆序处理插入队伍的信息。每个区间记录着每个区间能存放的人的数量。逆序插入时,若左子树还能放人,则放到左子树那,否则放到

右子树那。当前区间减1,并且将val的值放入到最终的答案中。

逆序处理的原因:如下面的数据

5
0 77
1 51
1 33
1 1000
2 69

可以知道69才是最终在第2位的后面的数,1000才是最终在第1位后面的树。


代码实现:

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
const int maxn = 200010;
int n,k, tn, tcase = 0;
int sum[maxn << 2],ans[maxn << 2];
int pos[maxn],val[maxn];

void pushup(int rt)
{
    sum[rt] = sum[rt << 1]+sum[rt << 1 | 1];
}
void build(int l, int r, int rt)
{
    sum[rt]=r-l+1;
	if(l==r)
		return ;
    int mid = (l + r) >> 1;
    build(lson);
    build(rson);
    pushup(rt);
}
void update(int pos ,int val,int l, int r, int rt)
{
    if (l == r)
    {
		ans[rt]=val;
		sum[rt]--;
		return;
    }
    int mid = (l + r) >> 1;
	if(pos<=sum[rt<<1])  //左子树还可以放人
		update(pos,val,lson);
	else 
		update(pos-sum[rt<<1],val,rson);

    pushup(rt);
}
void print(int l, int r, int rt)
{
    if(l == r){printf("%d ",ans[rt]);return;}
    int mid=(l+r)/2;
    print(lson);
    print(rson);
}

int main()
{
	// freopen("in.txt","r",stdin);
   while(scanf("%d",&n)!=EOF)
   {
	  for(int i=1;i<=n;i++)
            scanf("%d %d",&pos[i],&val[i]);
        build(1, n ,1);
        for(int i=n;i>=1;i--)
            update(pos[i]+1, val[i], 1, n, 1);
        print(1, n, 1);
        printf("\n");
   }
    return 0;
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013075699/article/details/45479413

智能推荐

MySQL插入数据性能调优-程序员宅基地

文章浏览阅读71次。插入数据性能调优总结:1.SQL插入语句调优2.如果是InnoDB引擎的话,尝试开启事务,批量提交3.调整MySQl数据库配置 参考:百度空间 - MySQL插入数据性能调优CSDN - MySQL插入大量数据调优..._mysql数据库性能调优的文章,教你如何快速插入数据,你是否插入数据时电脑卡顿?是否

2023 ICPC 网络赛 ADJL 现场 code | JorbanS-程序员宅基地

文章浏览阅读414次。【代码】2023 ICPC 网络赛 ADJL 现场 code | JorbanS。

jupyter notebook中matplotlib绘图包的中文乱码问题 —— 转载-程序员宅基地

文章浏览阅读965次。感谢原作,实测简洁、可用的教程查找matplotlib路径,输出大致如下:import matplotlibmatplotlib.matplotlib_fname()安装SimHei字体字体链接:百度网盘链接 密码:5vn4下载好的字体放到xxx/matplotlib/mpl-data/ttf下即可修改配置文件,配置文件在第一步的matplotlib路径下,添加内容如下...

Linux查询进程指令_linux查看进程命令-程序员宅基地

文章浏览阅读9.2k次,点赞3次,收藏7次。Linux 查询杀死进程_linux查看进程命令

Oracle EBS Forms查看trace file_ebs form trace-程序员宅基地

文章浏览阅读7.5k次。Introduction:Some times we need to diagnose the issue or error coming in forms. For such situation we need to get more information about the issue we are facing in forms. One of the best way to get su_ebs form trace

SpringBoot集成Spring Security(3)——异常处理_disabledexception-程序员宅基地

文章浏览阅读2.5w次,点赞25次,收藏92次。Step1 常见异常Step2 源码分析Step3 处理异常不知道你有没有注意到,当我们登陆失败时候,spring security帮我们跳转到了/login?error,奇怪的是不管是控制台还是网页上都没有打印错误信息。这是因为首先/login?error是spring security默认的失败url,其次如果你不手动处理这个异常,这个异常是不会被处理..._disabledexception

随便推点

npm 安装详细教程(cnpm)-程序员宅基地

文章浏览阅读10w+次,点赞74次,收藏361次。1、下载nodejswindows下的NodeJS安装是比较方便的(v0.6.0版本之后,支持windows native),只需要登陆官网(http://nodejs.org/),便可以看到首页的“INSTALL”按钮,直接点击就会自动下载安装了。2、安装过程安装过程基本直接“NEXT”就可以了。(windows的安装msi文件在过程中会直接添加path的系统变量,变量值是你..._npm

花了三天搭建K8S ,最有用的几篇博客-程序员宅基地

文章浏览阅读142次。https://www.jianshu.com/p/04f5b9791dc4?from=singlemessagehttps://blog.csdn.net/networken/article/details/85607593?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.compare&depth_1-utm_source=distribute.pc_releva.

快速了解自动化测试工具Parasoft vs Fortify功能对比_pbvsj-程序员宅基地

文章浏览阅读411次。你知道测试金字塔吗?为了用开发实践来扩大测试规模,如何以正确的数量设计合适类型的自动化测试?测试金字塔是一个很好的指南!测试金字塔是一个很好的视觉隐喻,它描述了不同的测试层,以及每一层要做多少测试。Parasoft测试金字塔 虽然测试自动化金字塔为高效的测试自动化策略提供了一个蓝图,但你不能把测试质量融入到应用程序中。金字塔需要建立在坚实的基础上,进行深度的代码分析,专注于识别和预防可靠性和安全性问题。Parasoft测试金字塔,如下图所示,展示了Parasoft如何帮助每个级别的测试解决方_pbvsj

Go-MySQL(二)Go实现MySQL连接池_go语言mysql连接池-程序员宅基地

文章浏览阅读1.4k次。文章目录Go-MySQL(二)Go实现MySQL连接池连接池数据结构获取连接释放连接关闭连接池测试完整代码Go-MySQL(二)Go实现MySQL连接池连接池数据结构利用channel来存储数据库连接,消费channel中的消息获取连接,连接池未满时则新建连接后将连接放入channel,采用的带缓冲区的channel,缓冲区大小就是连接池的最大容纳的连接数,如果缓冲区还有空间,那么获取和释放连接都不会阻塞,如果缓冲区为空,那么就是阻塞连接获取,从而走新建连接的逻辑;同理,缓冲区满了,就阻塞向chann_go语言mysql连接池

Mysql 日志分析工具介绍_mysql日志分析工具-程序员宅基地

文章浏览阅读1.1w次。1. 工具简介pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分_mysql日志分析工具

javaweb基于SSH开发校园社团管理系统源码 课程设计 大作业 毕业设计_tp6校园社团管理系统-程序员宅基地

文章浏览阅读106次。开发校园社团管理系统(大作业/毕业设计)+Jdk+Tomcat+MYSQL数据库。开发环境: Windows操作系统。_tp6校园社团管理系统

推荐文章

热门文章

相关标签