Есть

абстрактных ресурсов, пронумерованные целыми числами от

до

. Каждый ресурс в конкретный момент времени может находиться либо в занятом, либо в свободном состоянии. Изначально (в момент времени

) все ресурсы находятся в свободном состоянии.
Блокировка с порядковым номером

представляет из себя четверку чисел (

), обозначающих соответственно время старта (

), левую и правую границы индексов ресурсов (

), продолжительность (

) блокировки.
Блокировка

называется принятой, если на момент времени

все ресурсы с индексами в диапазоне
![$[l_i, r_i]$ $[l_i, r_i]$](https://dxdy-01.korotkov.co.uk/f/0/0/0/00004de2735390ca62dcdad8f2b842be82.png)
находятся в свободном состоянии. Принятая блокировка

переводит все ресурсы с индексами в диапазоне
![$[l_i, r_i]$ $[l_i, r_i]$](https://dxdy-01.korotkov.co.uk/f/0/0/0/00004de2735390ca62dcdad8f2b842be82.png)
в занятое состояние для всех моментов времени в диапазоне

.
Необходимо реализовать алгоритм, реализующий данную логику.
Формат входных данныхВ первой строке входных данных записано два числа —

, разделенных одним пробелом.
В последующих

строках задано описание блокировок в примере Васи. В

-й из этих строк записано четыре числа —

, разделенных одним пробелом.
Гарантируется, что все

различны.Блокировки следуют в порядке возрастания величины

.
Формат выходных данныхВ

-й строке выходных данных необходимо вывести результат обработки

-й блокировки в порядке следования во входных данных: если

-я блокировка является принятой, вывести
Yes, иначе
No.
Мое решение:
Код:
#include <iostream>
#include <vector>
using namespace std;
struct block {
int start, end, time;
};
int clear (int time, vector<block> *blocked) { // clear outdated blocks
for (auto it = blocked->cbegin(); it != blocked->cend(); ++it) {
if (it->time <= time) {
blocked->erase(it);
return 1;
}
}
return 0;
}
int intersects(vector<block>::const_iterator it, int start, int end) {
if ((start <= it->start && it->start <= end) ||
(start <= it->end && it->end <= end)) {
return 1;
}
return 0;
}
int block_me(vector<block> *blocked, int time, int start, int end, int duration) {
while (clear(time, blocked) == 1);
for (auto it = blocked->cbegin(); it != blocked->cend(); ++it) {
if (intersects(it, start, end) == 1) {
cout << "No";
return 1;
}
}
block t = {
.start = start,
.end = end,
.time = time + duration
};
blocked->push_back(t);
cout << "Yes";
return 0;
}
int main() {
int n, m;
cin >> n >> m;
vector<block> blocked;
for (int i = 0; i < m; ++i) {
int s, l, r, d;
cin >> s >> l >> r >> d;
block_me(&blocked, s, l, r, d);
cout << endl;
}
return 0;
}
Решение проверяется системой yandex contest. На седьмом тесте мой код выдает неверный ответ. Никак не могу понять, что я упустил?