B. Гости

Вася переехал из своего родного города и очень скучает по старым друзьям. К сожалению, Вася снимает маленькую квартиру и одновременно в гости к нему может приехать только один друг.

Каждый друг сказал Васе два числа A и B - с какого по какой день он может приехать в гости. Каждый друг приезжает и уезжает в полдень. Каждый друг может приехать к Васе только один раз и остаться у него на несколько дней. Вася хотел бы, чтобы суммарное количество дней, когда у него в гостях есть кто-нибудь из друзей, было максимальным. Помогите ему определить даты приезда для каждого из друзей так, чтобы они не пересекались (допустима ситуация, что в один день один из друзей приезжает, а другой - уезжает) и суммарное время, когда у Васи в гостях есть кто-то из друзей, было максимальным.

Формат ввода
В первой строке записаны целое число N (1 ≤ N ≤ 100000) - количество друзей Васи.

В следующих N строках записано по два целых числа Ai и Bi (оба числа от 1 до 109) - возможное время приезда i-го друга.

Формат вывода
Выведите N пар чисел Li и Ri - номера дней, в которые приедет и уедет i-й друг соответственно (Ai ≤ Li ≤ Ri ≤ Bi). Если i-го друга приглашать не нужно, выведите пару чисел -1 -1. Если правильных ответов несколько - выведите любой из них.

Ответы

Ответ дал: Proger228
0

Ответ:

Объяснение:

#include <iostream>

#include<vector>

#include <algorithm>

using namespace std;

int main() {

ios::sync_with_stdio(false);

int N, A, B;

cin >> N;

vector < vector <int>> IO;

int lastDay = 0;

for (int i = 0; i <  N; i++) {

 cin >> A >> B;

 IO.push_back(vector<int>());

 IO[i].push_back(A);

 IO[i].push_back(B);

 IO[i].push_back(i);

}

sort(IO.begin(), IO.end());

for (int i = 0; i < N; i++)

{

 if (lastDay >= IO[i][1]) {

  IO[i][0] = -1;

  IO[i][1] = -1;

 }

 else {

  if (lastDay < IO[i][0]) {

   lastDay = IO[i][1];

  }

  else if (lastDay >= IO[i][0]) {

   IO[i][0] = lastDay+1;

   lastDay = IO[i][1];

  }

 }

}

for (int i = 0; i < N; i++) {

 for (int j = 0; j < N; j++) {

  if (IO[j][2] == i) {

   cout << IO[j][0] << " " << IO[j][1] << endl;

   break;

  }

 }

}

return 0;

}


avarvus99p6o7sj: Что такое lastday? А так решение рабочее, спасибо!!!
Proger228: lastday - день отъезда для человека, которого мы рассматриваем в цикле
broforceplay: решение не рабочие, TL
Вас заинтересует