问题 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
样例输出
0
1
2
1
提示
对于所有数据,询问的个数不超过 25000 个,任意时刻数轴上的线段 不超过 1000 条, L, R 均在 32 位有符号整数的表示范围之内。
这题只需要简单模拟。将l与r依次存入,删除时将删组之后的组都往前移一位即可。
Code:
var标签:do,begin,end,线段,基础,tot,ans,代码 From: https://blog.51cto.com/u_15888102/5878333
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.