ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1116. Кусочно-постоянная функция

what is test 8?! I've tried all the tests in the forum but still be WA on test 8.....Can any one help me ???
Послано FailedWing 28 окт 2005 10:45
  var
    n, m    : longint;
    s, g, f : array[1..30000] of record
                      x, y, value : longint;
                    end;

  procedure init;
    var
    i : longint;
    begin
      read(n);
      for i := 1 to n do
        begin
          read(f[i].x, f[i].y, f[i].value);
          dec(f[i].y);
        end;
      readln;
      read(m);
      for i := 1 to m do
        begin
          read(g[i].x, g[i].y, g[i].value);
          dec(g[i].y);
        end;
      readln;
    end;

  function max(a, b : longint) : longint;
    begin
          if a > b
            then max := a
            else max := b;
    end;

  procedure make;
    var
    i, j, n1 : longint;
    begin
          i := 1;
      while i <= n do
        begin
          for j := 1 to m do
            begin
          if g[j].x > f[i].y
            then break;
                  if g[j].x <= f[i].x
                    then f[i].x := max(f[i].x, g[j].y + 1)
                    else if (g[j].x <= f[i].y) and (g[j].y >= f[i].y)
                          then f[i].y := g[j].x - 1
              else begin
                inc(n);
                f[n].x := g[j].y + 1;
                f[n].y := f[i].y;
                            f[n].value := f[i].value;
                            f[i].y := g[j].x - 1;
              end;
                  if f[i].x > f[i].y
                    then break;
        end;
                inc(i);
        end;
    end;

  procedure print;
    var
    i, total : longint;
    begin
      total := 0;
      total := 0;
      for i := 1 to n do
        if f[i].x <= f[i].y
          then inc(total);
          write(total, ' ');
      for i := 1 to total do
            if f[i].x <= f[i].y
          then write(f[i].x, ' ', f[i].y + 1, ' ', f[i].value, ' ');
      writeln;
    end;

  begin
        while not eof do begin
    init;
    make;
    print;
        end;
  end.