SSL P2645 线段树练习题二

来源:互联网 发布:XMLHttpRequest VB方法 编辑:程序博客网 时间:2024/05/18 00:55

题目大意:
N长度的桌子上零散地放着M个不同颜色的盒子,桌子的后方是一堵墙。给出每个箱子的左端跟右端,问从桌子前方可以看到多少个盒子?假设人站得足够远(输入时,由底向上,从左到右)。

1<=n<=100000,1<=m<=100000,保证坐标[l,r]范围为[1,n].
题解:
线段树:
跟ZJU的那道题一样,
http://blog.csdn.net/gx_man_vip/article/details/70160195
不过把记录数量变成了记录是否存在。

var      ans,tree:array [0..300000] of longint;      sum,i,n,m,a,b,c:longint;procedure insert(p,l,r,a,b:longint);var      mid:longint;begin      mid:=(l+r) div 2;      if (a=l) and (b=r)         then tree[p]:=c         else begin                  if tree[p]<>-1                     then begin                               tree[p * 2]:=tree[p];                               tree[p*2+1]:=tree[p];                               tree[p]:=-1;                          end;                  if b<=mid then insert(p*2,l,mid,a,b)                            else if a>=mid then insert(p*2+1,mid,r,a,b)                                           else begin                                                     insert(p * 2,l,mid,a,mid);                                                     insert(p*2+1,mid,r,mid,b);                                                end;              end;end;procedure count(p,l,r:longint);var      mid:longint;begin      mid:=(l+r) div 2;      if tree[p]=-2         then begin                  c:=-2;                  exit;              end         else if (tree[p]<>c) and (tree[p]<>-1)                 then begin                            c:=tree[p];                            ans[c]:=1;                      end                 else if (r-l=1) and (c=tree[p])                         then exit                         else if tree[p]=-1                                 then begin                                           count(p * 2,l,mid);                                           count(p*2+1,mid,r);                                      end;end;procedure print;begin     for i:=1 to n do         if ans[i]=1 then inc(sum);     writeln(sum);end;begin           for i:=0 to 300000 do tree[i]:=-2;           readln(n);           readln(m);           for i:=1 to m do           begin                readln(a,b);                c:=i;                insert(1,1,n,a,b);           end;           c:=-3;           count(1,1,n);           print;end.
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 转运停止寄到转运仓了怎么办 为什么阿里免费开店会被限制怎么办 e盘里的文件已经更改或移动怎么办 决斗之城忘了在那个服务器怎么办 ipad需要激活锁忘了id怎么办 小米非系统储存空间满了怎么办的 学生打暑假工被代理拖欠工资怎么办 华为畅享7plus进水了怎么办 华为荣耀6plus喇叭坏了怎么办 华为荣耀7x听筒声音小怎么办 华为智能手表开不了机了怎么办 华为手机重启忘记解锁密码怎么办 华为荣耀8手机开不开机怎么办 苹果5c手机开机密码忘了怎么办 魅蓝note6打王者掉帧怎么办 王者荣耀6月26日活动怎么办 荣耀v9玩刺激战场掉帧怎么办 华为荣耀v9进水开不开机怎么办 魅蓝2玩游戏超卡怎么办 华为手机突然黑屏开不了机怎么办 三星a9开机混合密码忘了怎么办 三星a9锁屏密码忘了怎么办 华为6x手机电源键失灵怎么办 华为手机更换主题后图标不变怎么办 手机屏幕上的拨打电话键没了怎么办 小米手机电用完了充不进去怎么办 华为微信分身版本过低怎么办 手机连接不上4g网络怎么办办 手机通话时老返回锁屏怎么办 小米手机指纹解锁按键不灵了怎么办 小米手机4s黑屏开不了机怎么办 手机老年机突然黑屏开不了机怎么办 苹果7P遮挡传感器就黑屏怎么办 手机被偷支付宝的钱被偷怎么办 oppo手机微信视频黑屏了怎么办 小米账号锁死插卡不显示卡怎么办 红米手机充电时不黑屏怎么办 酷派手机开机出现系统错误怎么办 乐视1s手机开不了机怎么办 酷派手机的信息文件夹不见了怎么办 酷派手机开机卡在开机界面怎么办