1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>

using namespace std;

int main() {
   const int zielony = 3;
   int n, m;
   // wskaznik na tablice intow ktora pozniej zrobimy
   int * puszki;
   cin >> n >> m;
   // tworzymy liste puszek o dlugosci n
   puszki = new int[n];
   for (int operacja = 0; operacja < m; operacja++){
       int start, stop, kolor;
       cin >> start >> stop >> kolor;
       for (int aktualna_puszka = start-1; aktualna_puszka < stop; aktualna_puszka++){
           // tutaj zastosujemy OR binarny
           // 100 binarnie to 1, 010 -> 2, 001 -> 4
           // kolor zolty = 1, przesuniecie 1ki o 0 miejsc -> wartosc 1
           // kolor niebieski = 2, przesuniecie 1ki o 1 miejsce -> wartosc 2
           // kolor czerwony = 3, przesuniecie 1ki o 2 miejsca -> wartosc 4
           puszki[aktualna_puszka] |= (1<<(kolor-1));
       }
   }
   int ile_zielonych = 0;
   for (int puszka = 0; puszka < n; puszka++){
       if(puszki[puszka] == zielony){
           ile_zielonych++;
       }
   }
   cout << ile_zielonych << endl;
   return 0;
}