%step = ( 20 => 1, 50+1 => -1 );
####
my %step;
foreach(@range) {
$step{ $_->[0] }++;
$step{ $_->[1]+1 }--;
}
####
my @edge = sort { $a <=> $b } keys %step;
my $step = 0;
my $x = shift @edge;
for(my $i = $x; defined $x; $i++) {
if($i == $x) {
$step += $step{$x};
$x = shift @edge;
}
$arr[$i] += $step;
}
####
@arr = (0) x 120;
@range = ([20, 50], [30, 100]);
####
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0