#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; } |
English