PPT1 例4

题意/Description

  x轴上有若干条不同线段,问某个单位区间[x,x+1]上重叠了多少条线段?

读入/Input
(不详)
5        //有5条线段
10 19
2 9
5 13
15 17
13 19
15 16    //问的单位区间

输出/Output
  问某个单位区间[x,x+1]上重叠了多少条线段

题解/solution
  给线段树每个节点增加一个Count域。表示所对应区间上重叠的线段数。
  线段树的构造方法:当某线段能够完整覆盖某个结点所对应的区间时,则不再二分。因此要统计某个单位区间上重叠的线段总数,必须把从叶结点到根结点路径上所有结点的count域累加。所以统计和构造一样要用二分。

代码/Code
type
  arr=record
    count:longint;
  end;
var
  tree:array [0..2001] of arr;
  n,m,ans,pt:longint;
procedure ins(p,l,r,a,b:longint);
var
  m:longint;
begin
  with tree[p] do
    begin
      m:=(l+r) div 2;
      if (a=l) and (b=r) then inc(count) else
        begin
          if b<=m then ins(p*2,l,m,a,b) else
            if a>=m then ins(p*2+1,m,r,a,b) else
              begin
                ins(p*2,l,m,a,m);
                ins(p*2+1,m,r,m,b);
              end;
        end;
    end;
end;

function count(p:longint):longint;
begin
  ans:=0;
  while p>0 do
    begin
      ans:=ans+tree[p].count;
      p:=p div 2;
    end;
  exit(ans);
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 pt:=p else
    if m>=b then find(p*2,l,m,a,b) else
      if m<=a then find(p*2+1,m,r,a,b) else
        begin
          find(p*2,l,m,a,m);
          find(p*2+1,m,r,m,b);
        end;
end;

procedure main;
var
  i,x,y:longint;
begin
  readln(n);
  m:=100;
  for i:=1 to n do
    begin
      readln(x,y);
      ins(1,1,m,x,y);
    end;
  readln(x,y);
  find(1,1,m,x,y);
end;

begin
  main;
  write(count(pt));
end.
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我是一名语言模型AI,无法制作PPT。但我可以为您提供大地坐标与空间直角坐标相互转换的算。以下是一个以WGS-84坐标系为的算: 1.大地坐标转空间直角坐标 以WGS-84坐标系为,假设要将经度为116.39745°,纬度为39.90869°,高程为50米的点转换为空间直角坐标。 1.1 计算椭球参数 WGS-84坐标系的椭球参数为: a = 6378137.0m f = 1/298.257223563 其中,a为椭球长半轴,f为椭球扁率。 1.2 计算子午线弧长 先计算经度所在的带号,带号宽度为6°,以116.39745°为,应属于带号“18”。 然后计算该带号的中央经线,公式为: L0 = 3 + 6 * (18 - 1) = 105 其中,L0为中央经线。 再计算该点距离中央经线的经度差: ΔL = 116.39745° - 105° = 11.39745° 根据以下公式计算子午线弧长: 其中,b = a * (1 - f)。 1.3 计算归化纬度 根据以下公式计算归化纬度: 其中,e为椭球第一偏心率,N为卯酉圈曲率半径。 1.4 计算空间直角坐标 根据以下公式计算空间直角坐标: 其中,X、Y、Z为空间直角坐标,N为卯酉圈曲率半径,φ为纬度,λ为经度,H为高程。 2.空间直角坐标转大地坐标 以WGS-84坐标系为,假设要将空间直角坐标为X = 2835118.849m,Y = 465794.686m,Z = 3311457.849m的点转换为大地坐标。 2.1 计算椭球参数 WGS-84坐标系的椭球参数为: a = 6378137.0m f = 1/298.257223563 其中,a为椭球长半轴,f为椭球扁率。 2.2 计算经度 先根据以下公式计算经度: 其中,X、Y、Z为空间直角坐标,ε为第一偏心率,ε’为第二偏心率,p为点到Z轴的距离,λ为经度。 然后根据以下公式计算经度所在的带号: L = int(λ / 6°) + 1 其中,L为带号。 最后根据以下公式计算经度: 其中,L0为中央经线。 2.3 计算纬度和高程 根据以下公式计算纬度和高程: 其中,X、Y、Z为空间直角坐标,a为椭球长半轴,f为椭球扁率,e为第一偏心率,e’为第二偏心率,N为卯酉圈曲率半径,H为高程,φ为纬度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值