poj提交数量过万的题,除了水爆了的题就是无比经典的,不得不刷的题。 准备将poj上提交次数过万的题刷个遍。 持续更新中。。。

poj 2828(线段树)

此题乃是Zhu, Zeyuan神牛出的,拿到题目就觉得这题真的是很有意思,苦想一天无果。 感叹大神的思维果真奇妙。 随随便便提出的问题都成为了如此经典。看了下讨论发现貌似不好想,再尝试了下发现有些问题还是没有想出解决掉方法,而且越来越混乱, 无奈只能看题解了。。。

由于插队是具有最高优先级,而且显然最后一个人插在哪里那么他的最终位置就是哪里。 所以可以从后往前看。先将最后一个人放好,再根据最后一个人的位置判断倒数第二个人的位置。 由此如果能在得知后n个点的位置推出从后往前第n+1个点的位置,那么这题就可以得到完美解决。直接模拟的话需要n*n的复杂度,明显不行。

用num[s]表示从l[s]到r[s]中还有多少空格可以放入(l[s]表示这段线段的左端点,r[s]表示这段线段的右端点)

当要插入到当前线段的第i个位置时,其实并不一定能插到i的位置,因为如果从起点到i上已经有点了,那么表示这点必须得后退,且出现一个点后退一步,且后退途中遇到新的点又得多后退一步。

到底是插入到左段还是右段 如果i<=num[2*s] (插入点的位置小于左段可插入的个数),那么就插入左段,否则插入右段且更新插入位置,i变成i-(cntleft-cnthave) 或者i+cnthave-cntleft其中cntleft表示左端的点个数cnthave表示左端有多少点已经插入了。  这个是用线段树的关键所在,可以举几个例子推一下。

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <string>
#include <algorithm>
#include <math.h>
#include <stdlib.h>
using namespace std;
#define N 200200 int n;
int gp[N],gv[N];
int l[*N],r[*N],num[*N];
int ans[N]; void build(int tl,int tr,int s)
{
l[s]=tl;
r[s]=tr;
if(tl==tr)
{
num[s]=;
return ;
}
int mid=(tl+tr)/;
build(tl,mid,*s);
build(mid+,tr,*s+);
num[s]=num[*s]+num[*s+];
} void update(int x,int w,int s)
{
if(l[s]==r[s])
{
ans[l[s]]=w;
num[s]=;
return ;
}
if(x<=num[*s])//左段又足够的空间,且要插入的位置比较靠前
update(x,w,*s);
else //左段不够,必须得到右边
update(x-num[*s],w,*s+);
num[s]--;
} int main()
{
while(scanf("%d",&n)!=EOF)
{
memset(num,,sizeof(num));
build(,n,);
for(int i=;i<=n;i++)
scanf("%d%d",gp+i,gv+i);
for(int i=n;i>=;i--)
{
update(gp[i]+,gv[i],);
}
for(int i=;i<n;i++)
printf("%d ",ans[i]);
printf("%d\n",ans[n]); }
return ;
}

poj万人题的更多相关文章

  1. 字节跳动已经10万人了?渣本双非Android程序员怎么上车?

    字节跳动已经 10 万人了? 是的,在 2020 年字节跳动的员工总数从 6 万蹿到 10 万,平均每个工作日就有 150 人在办理入职,加入字节跳动全球超过 240 个办公点. 更有统计,在总部北京 ...

  2. POJ推荐50题

    此文来自北京邮电大学ACM-ICPC集训队 此50题在本博客均有代码,可以在左侧的搜索框中搜索题号查看代码. 以下是原文: POJ推荐50题1.标记“难”和“稍难”的题目可以看看,思考一下,不做要求, ...

  3. 第一章 基础设施,1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的(作者:蔡华)

    1.3 阿里视频云ApsaraVideo是怎样让4000万人同时狂欢的 前言 在今年的双11中,双11天猫狂欢夜的直播成为一大亮点. 根据官方披露数据,直播总观看人数超4257万,同时观看人数峰值达5 ...

  4. 最短路+线段交 POJ 1556 好题

    // 最短路+线段交 POJ 1556 好题 // 题意:从(0,5)到(10,5)的最短距离,中间有n堵墙,每堵上有两扇门可以通过 // 思路:先存图.直接n^2来暴力,不好写.分成三部分,起点 终 ...

  5. 每年有20万人进军IT行业,为何还会人才短缺?

    众所周知,IT行业是个高薪行业,也是很多人的梦想职业,在全球最缺人的十大行业中IT行业居首位. 但是现在很多人都有一个疑问: 几乎每所大学里都有计算机技术相关专业,再加上IT培训机构的输出,每年培养出 ...

  6. 落实制度靠流程<摘自平安50万人的执行力>

     落实制度靠流程<摘自平安50万人的执行力> 讲在嘴上的制度是给人听的,写在纸上的制度是给人看的,落实在流程上的制度才是可靠的.制度的执行不能都依赖个人的自觉性. 很多企业都在强调和推行制 ...

  7. Python如何实现微信群万人同步直播?

    很多人传言微信网页版(https://wx.qq.com/)接口已经被封了,所以所有的微信都不能登录网页版,这是错误的. 2019年7月微信对网页版微信进行了动态安全策略调整,导致一大批微信号不能登录 ...

  8. https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf

    https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf http ...

  9. 突破JAVA万人面试,懂多线程者得天下

    突破JAVA万人面试,懂多线程者得天下   在面试中,求职者会遇到很多棘手的问题,其中关于"线程安全"."线程同步"."线程死锁"等方面的面 ...

随机推荐

  1. 【Shiro】Apache Shiro架构之权限认证(Authorization)

    Shiro系列文章: [Shiro]Apache Shiro架构之身份认证(Authentication) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shir ...

  2. linux下各种形式的shell加法操作总结

    linux 下shell加法操作总结: #!/bin/bash   n=1;echo -n "$n "   let "n = $n + 1" echo -n & ...

  3. 基于easyui fom分组插件

    本插件适用于表单按属性分组,可以动态设置显示的列数,每一个表单宽度,表单类型,以及对齐.不同panel之间的表单也是对齐的. 效果: 依赖:jquery ,easyui, 实现过程:整个控件一个pan ...

  4. Android数据格式解析对象JSON用法

    1.JSON概念: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性,从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. JSON可以将 ...

  5. yii xss模型安全

    在这篇文章里,我们将描述一个基于WEB应用下避免不合法的内容注入. 我们要在一个行为里使用htmlpurifier类,用这种行为可以加强任何模型并表明各属性我们想让它们XSS安全. 我写了以下行为: ...

  6. signed distance field 算法

    将二值图转化成signed distance field后,可以在双线性插值下实现平滑放大. 定义: 到前景的distance field:各点到最近前景点的距离. 到背景的distance fiel ...

  7. sell学习

    Linux Shell编程入门 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Sh ...

  8. C/C++ 错误笔记-解决swap函数与标准库的std::swap函数冲突的问题

    下午写了一份代码: #include <iostream> using namespace std; // 模板1:交换基本类型的值 template<typename T> ...

  9. 544. Top k Largest Numbers【medium】

    Given an integer array, find the top k largest numbers in it.   Example Given [3,10,1000,-99,4,100] ...

  10. CCNA2.0笔记_二层交换

    VLAN上并不需要配置IP地址,除非是出于管理的需要. 基于Vlan的设计原理,即隔离网络的广播域,再者运行STP来提供二层的防环机制:在同一个设备集中不同Vlan之间是无法通信的(在没有三层设备的情 ...