#!/usr/bin/python3 # pořídíme si třídu na přednášku, abychom se v kódu lépe vyznali class Prednaska: def __init__(self, zacatek, konec, misto=None): self.zacatek = int(zacatek) self.konec = int(konec) self.misto = misto # načteme vstup P, V = map(int, input().split()) povinne = [] for _ in range(P): # * vyplivne čísla ze vstupu postupně do funkce na inicializaci přednášky, takže správně nastaví začátek, konec a místo povinne.append(Prednaska(*input().split())) volitelne = [] for _ in range(V): volitelne.append(Prednaska(*input().split())) p = 0 # ukazatele do pole povinných a volitelných přednášek v = 0 preskocene = 0 # spočítám kolik přednášek musím přeskočit while p < P - 1: # hledám přejezdy mezi různými místy - jen tam se vyskytují přednášky co musím přeskočit if povinne[p].misto != povinne[p + 1].misto: # najdu první volitelnou přednášku v rozsahu přejezdu while volitelne[v].zacatek < povinne[p].zacatek: v += 1 if v >= V: # pokud jsme na konci volitelných přednášek, tak přestaneme hledat, protože přejedeme kdykoliv break if v >= V: break cas = povinne[p].konec + 40 # od kdy se můž koukat na přednášky když přejedu po hned po konci povinný # nad volitelnými přednáškami si pořídím okénko, které v sobě bude obsahovat přednásky, které přeskočím když přejedu ihned po v lv, pv = v, v while pv < V and cas > volitelne[pv].zacatek: # pravym posouváme dokud přednášky začneme stíhat pv += 1 minimum = pv - lv # nastavime minumum preskocenych, to se budeme snazit zmensit # okénkuju postupně od konců volitelných přednasek a hledám, jestli se nevyplatí přejet po nějaké volitelné while v < V and volitelne[v].zacatek < povinne[p + 1].zacatek: cas = volitelne[v].konec + 40 # když už nestíhám přejet protože nestíhám povinnou přednášku if cas > povinne[p + 1].zacatek: break lv = v + 1 pv = max(pv, v + 1) # pravý okraj už nechci posouvat kvůli složitosti, když jsem nestíhal přednašku # při předchozím přejezdu, nestíhám ji určitě ani teď while pv != V and cas > volitelne[pv].zacatek: # posouvam pravy okraj nez prednasky opet nezacnu stihat pv += 1 minimum = min(minimum, pv - lv) # aktualizuji minimum v += 1 preskocene += minimum # přičteme k přeskočeným minimim přednášek, co musíme v tomto přejezdu přeskočit p += 1 # stíhám všechny přednásky co nemusím přeskočit print(V - preskocene)