C/C++

Помогите задачку зарешать пж

/* программа на языке Си */

#include <stdio.h>
#include <stdlib.h>

int main()
{
const char salut[6] = "21:00"; /* время начала салюта */
unsigned N, Count = 0;
scanf("%u",&N);
char ** T;
T = (char**) malloc(sizeof(char*) * N);
for(unsigned x = 0; x < N; x++)
T[x] = (char*) malloc(sizeof(char) * 6);

/* структура ввода времени: две цифры -- часы, потом двоеточие, потом две цифры -- минуты */
for(unsigned x = 0; x < N; x++)
{
scanf("%s",T[x]);

if(T[x][0] >= '0' && T[x][0] <= '9' && T[x][1] <= '9' && T[x][1] >= '0'
&& T[x][2] == ':' && T[x][3] >= '0' && T[x][3] <= '9'
&& T[x][4] >= '0' && T[x][4] <= '9')
{
if(T[x][0] < salut[0])
{
Count++;
}
else if(T[x][0] == salut[0])
{
if(T[x][1] < salut[1])
{
Count++;
}
else if(T[x][1] == salut[1])
{
if(T[x][3] < salut[3])
{
Count++;
}
else if(T[x][3] == salut[3])
{
if(T[x][4] <= salut[4])
{
Count++;
}
}
}
}
}
}

printf("%u\n",Count);

if(T == (char**) NULL)
{
exit(1);
}
else
{
for(unsigned x = 0; x < N; x++)
{
if(T[x] == (char*) NULL)
{
exit(1);
}
else
{
free(T[x]);
T[x] = (char*) NULL;
}
}
free(T);
T = (char**) NULL;
}
return 0;
}

/*
Если нужен язык С++ -- дождитесь, пока кто-то другой ответит.
Мне будет некогда переделывать.
*/
Юрий Ширков
Юрий Ширков
76 089
Лучший ответ
 #include  
#include
using namespace std;

int main()
{
uint32_t N, view_salut_count{}, view_max_count{};
map seq; //точки входа и выхода зрителей
cin >> N;
while (N--)
{
uint32_t start, stop;
cin >> start >> stop;
seq[start]++; //начало диапазаона : точка дает +1 зритель
seq[stop]--; //конец диапазона : точка дает -1 зритель
}
for (auto& point : seq) //идем по всем точкам
{
view_salut_count += point.second; //в каждой точке количество зрителей уменьшается или увеличивается
if (view_max_count < view_salut_count) view_max_count = view_salut_count; //нахождение масксимума
}
cout
Виталик Мошков
Виталик Мошков
51 416
 #include  
#include

using namespace std;

int main() {
int n;
map points;
cin >> n;
for (int i = 0; i < n; i++) {
int l, r;
cin >> l >> r;
points[l] += 1;
points[r] -= 1;
}

int max = 0, current = 0;
for (const auto& time_delta : points) {
current += time_delta.second;
if (current > max) {
max = current;
}
}
cout
Сергей Алехин
Сергей Алехин
9 861
Сергей Алехин
 #include  
#include

using namespace std;

int main() {
int n;
map points;
cin >> n;
for (int i = 0; i < n; i++) {
int l, r;
cin >> l >> r;
points[l] += 1;
points[r + 1] -= 1;
}

int max = 0, current = 0;
for (const auto& time_delta : points) {
current += time_delta.second;
if (current > max) {
max = current;
}
}
cout