#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int niebieskie[1000002];
int zolte[1000002];
int n, m;
int lewy, prawy, kolor;
int suma;
vector < int > nieb;
vector < int > zolt;
vector < int > czerw;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for(int i=1; i<=n; i++)
{
nieb.push_back(i);
zolt.push_back(i);
czerw.push_back(i);
}
for(int i=0; i<m; i++)
{
cin >> lewy >> prawy >> kolor;
if(kolor==2)
{
vector < int > ::iterator it3=lower_bound(nieb.begin(), nieb.end(), lewy);
while(it3!=nieb.end())
{
if(*it3<=prawy)
{
niebieskie[*it3]+=1;
nieb.erase(it3);
}
else
{
break;
}
//it3++;
}
}
else if(kolor==1)
{
vector < int > ::iterator it4=lower_bound(zolt.begin(), zolt.end(), lewy);
while(it4!=zolt.end())
{
if(*it4<=prawy)
{
zolte[*it4]+=1;
zolt.erase(it4);
}
else
{
break;
}
//it4++;
}
}
else
{
vector < int > ::iterator it5=lower_bound(czerw.begin(), czerw.end(), lewy);
while(it5!=czerw.end())
{
if(*it5<=prawy)
{
niebieskie[*it5]-=1000001;
zolte[*it5]-=1000001;
czerw.erase(it5);
}
else
{
break;
}
//it5++;
}
}
}
for(int i=1; i<=n; i++)
{
//cout << i << " " << niebieskie[i] << " " << zolte[i] << "\n";
if(niebieskie[i]>=1 && zolte[i]>=1)
{
suma++;
}
}
cout << suma;
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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int niebieskie[1000002]; int zolte[1000002]; int n, m; int lewy, prawy, kolor; int suma; vector < int > nieb; vector < int > zolt; vector < int > czerw; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for(int i=1; i<=n; i++) { nieb.push_back(i); zolt.push_back(i); czerw.push_back(i); } for(int i=0; i<m; i++) { cin >> lewy >> prawy >> kolor; if(kolor==2) { vector < int > ::iterator it3=lower_bound(nieb.begin(), nieb.end(), lewy); while(it3!=nieb.end()) { if(*it3<=prawy) { niebieskie[*it3]+=1; nieb.erase(it3); } else { break; } //it3++; } } else if(kolor==1) { vector < int > ::iterator it4=lower_bound(zolt.begin(), zolt.end(), lewy); while(it4!=zolt.end()) { if(*it4<=prawy) { zolte[*it4]+=1; zolt.erase(it4); } else { break; } //it4++; } } else { vector < int > ::iterator it5=lower_bound(czerw.begin(), czerw.end(), lewy); while(it5!=czerw.end()) { if(*it5<=prawy) { niebieskie[*it5]-=1000001; zolte[*it5]-=1000001; czerw.erase(it5); } else { break; } //it5++; } } } for(int i=1; i<=n; i++) { //cout << i << " " << niebieskie[i] << " " << zolte[i] << "\n"; if(niebieskie[i]>=1 && zolte[i]>=1) { suma++; } } cout << suma; return 0; } |
English