线段树经典题(3.0版)
来源:互联网 发布:淘宝好看男鞋店铺推荐 编辑:程序博客网 时间:2024/06/16 09:19
题目大意:x轴上有若干条不同线段,问某个单位区间[x,x+1]上重叠了多少条线段?
数据: 输出:3
5 20
10 19
2 9
5 13
15 17
13 19
15 16
分析:我们只考虑小数据,在例三的基础上加一个域count,表示区间内的重叠的线段的数量,统计即可。
const
maxn=100000;
type
treenode=record
cover,count:longint;
end;
var
tree:array [0..maxn] of treenode;
n,ans,pl,l:longint;
procedure insert(p,l,r,a,b:longint);
varm:longint;
begin
m:=(l+r) div 2;
if(a=l) and (b=r) then
tree[p].count:=tree[p].count+1
else begin
if b<=m then insert(p*2,l,m,a,b)
else if a>=m then insert(p*2+1,m,r,a,b)
else begin
insert(p*2,l,m,a,m);
insert(p*2+1,m,r,m,b);
end;
end;
end;
function count(p:longint):longint;
var
result:longint;
begin
result:=0;
while p>0 do
begin
result:=result+tree[p].count;
p:=p div 2;
end;
count:=result;
end;
procedure find(p,l,r,a,b:longint);
var
m:longint;
begin
m:=(l+r) div 2;
if(l=a) and (r=b) then
pl:=p
else if m>=b then
find(2*p,l,m,a,b)
else if a>=m then
find(2*p+1,m,r,a,b)
else begin
find(2*p,l,m,a,m);
find(2*p+1,m,r,m,b);
end;
end;
procedure main;
vara,b,i,c:longint;
begin
readln(n,l);
fori:=1 to n do
begin
readln(a,b);
insert(1,1,l,a,b);
end;
readln(a,b);
find(1,1,l,a,b);
writeln(count(pl));
end;
begin
main;
end.
- 线段树经典题(3.0版)
- 线段树经典题(升级版)
- 线段树经典题
- POJ_3667 线段树+lazy (线段树经典题)
- hdu1166+线段树经典题
- poj1151-Atlantis(线段树+扫描线(经典题))
- poj 3225 线段树 经典题
- 线段树经典题目(一定要做完)
- 线段树经典题目(一定要做完)
- (转)线段树经典讲解
- POJ3264Balanced Lineup(经典线段树)
- 求最大值(经典线段树)
- 经典 hdu1556 线段树
- poj3667hotal线段树【经典】
- 线段树结业题:SPOJ1557 GSS2 经典中的经典
- POJ 3468 经典线段树
- POJ2528【线段树经典染色。】
- 线段树经典类型归纳
- 16进制的转换
- iphone app为什么会被打回来的一些情况,如何制止?
- opencv
- 转换为16进制
- 使用 jsonrpc-for-java 所出現的問題
- 线段树经典题(3.0版)
- 【DirectX11】第八篇 光照模型——漫反射
- window下rabbitmq的配置问题
- HDU5546
- poj 1088 滑雪(记忆化搜索/动态规划)
- 比较数的大小(冒泡法)
- 像电影里黑客高手一样写代码
- memcached(六)调优经验
- hadoop安全模式无法强制关闭的问题