poj万人题

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表示左端有多少点已经插入了。  这个是用线段树的关键所在,可以举几个例子推一下。

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <string>
 5 #include <algorithm>
 6 #include <math.h>
 7 #include <stdlib.h>
 8 using namespace std;
 9 #define N 200200
10
11 int n;
12 int gp[N],gv[N];
13 int l[4*N],r[4*N],num[4*N];
14 int ans[N];
15
16 void build(int tl,int tr,int s)
17 {
18     l[s]=tl;
19     r[s]=tr;
20     if(tl==tr)
21     {
22         num[s]=1;
23         return ;
24     }
25     int mid=(tl+tr)/2;
26     build(tl,mid,2*s);
27     build(mid+1,tr,2*s+1);
28     num[s]=num[2*s]+num[2*s+1];
29 }
30
31 void update(int x,int w,int s)
32 {
33     if(l[s]==r[s])
34     {
35         ans[l[s]]=w;
36         num[s]=0;
37         return ;
38     }
39     if(x<=num[2*s])//左段又足够的空间,且要插入的位置比较靠前
40         update(x,w,2*s);
41     else //左段不够,必须得到右边
42         update(x-num[2*s],w,2*s+1);
43     num[s]--;
44 }
45
46
47 int main()
48 {
49     while(scanf("%d",&n)!=EOF)
50     {
51         memset(num,0,sizeof(num));
52         build(1,n,1);
53         for(int i=1;i<=n;i++)
54             scanf("%d%d",gp+i,gv+i);
55         for(int i=n;i>=1;i--)
56         {
57             update(gp[i]+1,gv[i],1);
58         }
59         for(int i=1;i<n;i++)
60             printf("%d ",ans[i]);
61         printf("%d\n",ans[n]);
62
63     }
64     return 0;
65 }

时间: 2024-10-08 21:48:20

poj万人题的相关文章

290万人考研:所有的不平凡,从不认命开始

对于很多人来说,这两天就是一个普通的周末,是圣诞节和元旦快到来的日子. 但对有些人来讲,这几天或许是他们人生中最重要的日子之一,重要到足以改变他们的命运和人生轨迹. 昨天是考研初试的首日,据教育部统计,今年报名考研的人数高达290万人,史无前例. 虽然真正走上考场的人并没有这么多,不少人只是跟风报名,打打酱油,重在参与而已,但也不得不正视一个现象:考研正成为很多毕业生的首选. 很多人为什么会选择考研? 认为没有勇气面对就业,想通过考研来逃避现实的声音不少,这种情况确实存在,但我认为更多的人是在进

POJ 1021 人品题

报告见代码.. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 7 const int MAX=105; 8 int dir[4][2]={1,0,-1,0,0,1,0,-1}; 9 int h,w,n; 10 int maze[MAX][MAX]; 11 int maze2[MAX][

[转]POJ的刷题指南(加了超链接的)

网上看到的转过来一下,顺便把题目都加了个超链接,方便刷起~ POJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一.基本算法:       (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.       (4)递推.       (5)构造法.(po

FutureNet万人团艾迪导师薇io288288

FutureNet万人团艾迪导师薇io288288,中国区FutureNet第一团队领导微信:io288288,FutureNet,FutureNet公司介绍,FutureNet奖金模式,FutureNet奖金制度,FutureNet是什么?FutureNet的优势,FutureNet是传销吗?FutureNet怎么做?FutureNet怎么玩?FutureNet骗局?FutureNet骗局带图? FutureNet必定会创造出投资领域的又一个传奇,缔造新一轮的财富神话.那么,FutureNet

FutureNet万人团林辉导师薇mlj5151

FutureNet万人团林辉导师薇:mlj5151,中国区FutureNet第一团队领导微信:mlj5151,FutureNet,FutureNet公司介绍,FutureNet奖金模式,FutureNet奖金制度,FutureNet是什么?FutureNet的优势,FutureNet是传销吗?FutureNet怎么做?FutureNet怎么玩?FutureNet骗局?FutureNet骗局带图? FutureNet必定会创造出投资领域的又一个传奇,缔造新一轮的财富神话.那么,FutureNet是

FutureNet是真的吗?万人团铁骑薇:matieqi123

FutureNet是真的吗?万人团铁骑薇:matieqi123,中国区FutureNet第一团队领导微信:matieqi123,FutureNet,FutureNet公司介绍,FutureNet奖金模式,FutureNet奖金制度,FutureNet是什么?FutureNet的优势,FutureNet是传销吗?FutureNet怎么做?FutureNet怎么玩?FutureNet骗局?FutureNet骗局带图? FutureNet必定会创造出投资领域的又一个传奇,缔造新一轮的财富神话.那么,F

最短路+线段交 POJ 1556 好题

1 // 最短路+线段交 POJ 1556 好题 2 // 题意:从(0,5)到(10,5)的最短距离,中间有n堵墙,每堵上有两扇门可以通过 3 // 思路:先存图.直接n^2来暴力,不好写.分成三部分,起点 终点和之间的点:中间点之间:起点和终点的距离 4 // n最大为18所以直接n^3最短路 5 6 7 #include <cstdio> 8 #include <cstring> 9 #include <iostream> 10 #include <algo

贝尔地板“壁咚”大自然 5.23“万人疯抢”即将引爆

自3月24日大自然地板正式入股贝尔地板以来,国内地板巨擎与国际出口大鳄,两大强势品牌之间的携手合作愈演愈烈:双方在品牌协作.电子商务领域.O2O拓展.渠道建设等诸多领域互通有无,强强联手取得了突破性的进展.经过长达30多天的周密筹备,贝尔地板联手大自然,2015年度最强促销活动盛典——“5.23万人疯抢”年度盛会即将在常州贝尔工业园盛大引爆. 工厂直供,力度空前 5月4日,贝尔地板“5.23万人疯抢”动员大会顺利举办,来自长三角各地近五十位经销商“先锋”齐集贝尔地板常州总部,在贝尔智能家居有限公

蓝色巨人IBM转型有困难,但不至于裁员11万人?

市场流传的消息称,蓝色巨人IBM将裁员26%,根据目前公司雇用人员数计算大约为11万人,创下公司裁员的记录(IBM此前曾有过裁员6万人的"壮举"),虽然裁员大部分可能在印度等发展中国家的分公司,不过IBM仍将支付大笔的遣散费,估算在100亿美元上下,如果消息被确认,那么IBM瘦身的决心可见一斑. 不过目前看裁员11万人太过激进,而且信源单一,IBM总部仍未回应,大家疑虑的是IBM是否会不顾现在的业务和公司的军心如此操作.IBM已经在不断出售硬件资产并且转型云服务,也在频繁出击多领域布局