基础代码-线段

来源:互联网 发布:局域网监控软件 编辑:程序博客网 时间:2024/06/05 11:42

问题 B: 线段

时间限制: 1 Sec  内存限制: 128 MB

题目描述

考虑一些在实数轴上的线段,你需要写一个程序处理以下两种询问:

1. 询问 + L R 增加一条线段 [L, R],你的程序应该输出有多少条线段被 该线段包含(非严格)。

2. 询问 - L R 删除线段 [L, R],如果这条线段不存在则忽略这个询问。 

输入

输入文件的每一行都包含一个询问,格式如题目所述,你的程序应该 处理到文件结束为止。 

输出

对于每一个 “+” 询问,输出一个整数,代表被该线段包含的线段条 数。 

样例输入

+ 1 2+ 1 2+ 0 3- 1 2+ 1 2

样例输出

0121

提示

对于所有数据,询问的个数不超过 25000个,任意时刻数轴上的线段 不超过 1000条, L, R 均在 32 位有符号整数的表示范围之内。 

这题只需要简单模拟。将l与r依次存入,删除时将删组之后的组都往前移一位即可。

Code:

var  ch:char;i,j,x,y,ans,tot:longint;   l,r:array[1..1005] of longint; procedure add(x,y:longint); begin  inc(tot);   l[tot]:=x;r[tot]:=y; end; begin  while not(eof) do  begin    read(ch);     if ch='+' then    begin      readln(x,y);       ans:=0;       for i:=1 to tot do        if (x<=l[i])and(y>=r[i]) then          inc(ans);       add(x,y);       writeln(ans);     end else    begin      readln(x,y);       for i:=tot downto 1 do        if (l[i]=x)and(r[i]=y) then        begin          for j:=i to tot-1 do          begin            l[j]:=l[j+1];             r[j]:=r[j+1];           end;           dec(tot);           break;         end;     end;   end; end. 
原创粉丝点击