#include <iostream> #include <vector> using namespace std; class Vector2D{ public: int x; int y; Vector2D(int X,int Y){ x = X; y = Y; } }; bool Bi(vector<Vector2D> &Kolor,int n){ int hi = Kolor.size()-1; int lo = 0; int mid= 0; while(hi>=lo){ mid = int(lo +(hi-lo)/2); if(n<Kolor[mid].x) hi = mid -1; else if(n>Kolor[mid].y) lo = mid +1; else return true; } return false; } void dodajprzedzial(vector<Vector2D> &Kolor, int d, int u){ int sizee = Kolor.size(); if(sizee == 0) Kolor.push_back(Vector2D(d,u)); for(int q=0;q<sizee;q++){ if(u < Kolor[q].x){ Kolor.insert(Kolor.begin() + q, Vector2D(d,u)); break; } if(d >= Kolor[q].x && d <= Kolor[q].y){ Kolor[q].y = max(u, Kolor[q].y); break; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); vector<Vector2D> zolt; vector<Vector2D> nieb; vector<Vector2D> czer; int ile_puszek = 0; cin >> ile_puszek; int ile_komb = 0; cin >> ile_komb; int kolor = 0; int x = 0; int y = 0; for(int i=0;i<ile_komb;i++){ cin >> x; cin >> y; cin >> kolor; kolor--; if(kolor == 0) dodajprzedzial(zolt,x,y); if(kolor == 1) dodajprzedzial(nieb,x,y); if(kolor == 2) dodajprzedzial(czer,x,y); } int zielone = 0; for(int i=1;i<=ile_puszek;i++){ if(Bi(zolt,i)&&Bi(nieb,i)&&!Bi(czer,i)) zielone++; } cout << zielone; return 0; }
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <iostream> #include <vector> using namespace std; class Vector2D{ public: int x; int y; Vector2D(int X,int Y){ x = X; y = Y; } }; bool Bi(vector<Vector2D> &Kolor,int n){ int hi = Kolor.size()-1; int lo = 0; int mid= 0; while(hi>=lo){ mid = int(lo +(hi-lo)/2); if(n<Kolor[mid].x) hi = mid -1; else if(n>Kolor[mid].y) lo = mid +1; else return true; } return false; } void dodajprzedzial(vector<Vector2D> &Kolor, int d, int u){ int sizee = Kolor.size(); if(sizee == 0) Kolor.push_back(Vector2D(d,u)); for(int q=0;q<sizee;q++){ if(u < Kolor[q].x){ Kolor.insert(Kolor.begin() + q, Vector2D(d,u)); break; } if(d >= Kolor[q].x && d <= Kolor[q].y){ Kolor[q].y = max(u, Kolor[q].y); break; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); vector<Vector2D> zolt; vector<Vector2D> nieb; vector<Vector2D> czer; int ile_puszek = 0; cin >> ile_puszek; int ile_komb = 0; cin >> ile_komb; int kolor = 0; int x = 0; int y = 0; for(int i=0;i<ile_komb;i++){ cin >> x; cin >> y; cin >> kolor; kolor--; if(kolor == 0) dodajprzedzial(zolt,x,y); if(kolor == 1) dodajprzedzial(nieb,x,y); if(kolor == 2) dodajprzedzial(czer,x,y); } int zielone = 0; for(int i=1;i<=ile_puszek;i++){ if(Bi(zolt,i)&&Bi(nieb,i)&&!Bi(czer,i)) zielone++; } cout << zielone; return 0; } |