Робот-агитатор Эйвери хотел бы захватить часть города, чтобы собрать землю для всех роботов. Эйвери нацелился на Автоматон-авеню, исторический культурный центр робототехники. К сожалению, Риэлтор в настоящее время владеет всеми N зданиями на Авеню Автоматон, удобно пронумерованными 1..N.

Эйвери решает, что они возглавят серию восстаний, чтобы заявить права на участки Авеню Автоматон, от A_i до B_i, так что все здания, пронумерованные от A_i до B_i включительно, будут использоваться роботами. Как и все хорошие риелторы, Райли хотела бы защитить свою землю от роботов. Однако правоохранительные органы слишком заняты борьбой с другими повстанцами, чтобы обеспечить соблюдение закона о собственности, поэтому Райли также должна силой вернуть себе их землю.

Обе стороны вместе взятые, в определенном порядке, возглавляют в общей сложности M приступов. Помогите Эйвери подсчитать количество зданий, занятых роботами после этих захватов M.

Чтобы увидеть или попытаться решить проблему полностью, зарегистрируйтесь здесь, затем нажмите здесь.

Решение

Эта проблема решается просто реализацией. Мы можем представить N зданий в виде логического массива. Изначально все здания «фальшивые», что означает, что они не принадлежат Эйвери. Для каждого захвата земли мы устанавливаем для всех зданий в диапазоне значение «истина», если землю захватывает Эйвери, и «ложь», если это происходит с Райли.

После того, как мы смоделировали полный набор действий, просто подсчитайте количество «истинных» значений в массиве. Это равнозначно зданиям, принадлежащим Эйвери.

Ниже мое решение на C ++.

#include<iostream>
using namespace std;
int n, m, a, b, cnt;
char c;
bool avenue[102];
int main() {
    cin >> n >> m;
    for (int i = 0; i < m; i++) {
        cin >> c >> a >> b;
        for (int j = a; j <= b; j++) avenue[j] = (c == 'A');
    }
    for (int i = 1; i <= n; i++) cnt += avenue[i];
    cout << cnt << endl;
}