扫描线+set维护。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 +7;
int n, k;
typedef pair<int, int> pii;
vector <pii> add[maxn];
set <pii> s;
set <int> ans;
set <int> :: iterator it;
int l, r;
int main()
{
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i ++)
{
scanf("%d%d", &l, &r);
add[l].push_back((pii(r, i + 1)));
}
for(int i = 0; i < maxn; i ++)
{
for(int j = 0; j < add[i].size(); j ++)
{
s.insert(add[i][j]);
}
while(s.size() && s.begin()->first < i)
{
s.erase(*s.begin());
}
while(s.size() > k)
{
ans.insert(s.rbegin()->second);
s.erase(*s.rbegin());
}
}
printf("%d\n", ans.size());
for(it = ans.begin(); it != ans.end(); it ++)
{
if(it != ans.begin())
printf(" ");
printf("%d", *it);
}
printf("\n");
}