#include #include #include using namespace std; struct Matryoshka { int r, R; }; // 外径を基準に昇順でソートするための比較関数 bool compare(const Matryoshka &a, const Matryoshka &b) { return a.R < b.R || (a.R == b.R && a.r < b.r); } // 最長増加部分列 (LIS) を求めるための関数 int LIS(const vector &seq) { vector lis; for(int x : seq) { auto it = lower_bound(lis.begin(), lis.end(), x); if(it == lis.end()) { lis.push_back(x); } else { *it = x; } } return lis.size(); } int main() { int N; cin >> N; vector dolls(N); for(int i = 0; i < N; ++i) { cin >> dolls[i].r >> dolls[i].R; } // 外径でソートする sort(dolls.begin(), dolls.end(), compare); // 内径の配列を作成する vector innerDiameters(N); for(int i = 0; i < N; ++i) { innerDiameters[i] = dolls[i].r; } // 内径に基づいてLISを求める int maxDolls = LIS(innerDiameters); // 必要な操作Bの回数 int operationsB = N - maxDolls; cout << operationsB << endl; return 0; }