Movie Festival II Solution | CSES Problem Set

 

CSES Problem Set

Movie Festival II

In a movie festival, n movies will be shown. Syrjälä's movie club consists of k members, who will be all attending the festival.

You know the starting and ending time of each movie. What is the maximum total number of movies the club members can watch entirely if they act optimally?

Input

The first input line has two integers n and k: the number of movies and club members.

After this, there are n lines that describe the movies. Each line has two integers a and b: the starting and ending time of a movie.

Output

Print one integer: the maximum total number of movies.

Constraints
  • 1kn2105
  • 1a<b109
Example

Input:
5 2
1 5
8 10
3 6
2 5
6 9


Output:
4


#include <bits/stdc++.h>

using namespace std;

#define int            long long int
#define F              first
#define S              second
#define pb             push_back
#define si             set <int>
#define vi             vector <int>
#define pii            pair <int, int>
#define vpi            vector <pii>
#define vpp            vector <pair<int, pii>>
#define mii            map <int, int>
#define mpi            map <pii, int>
#define spi            set <pii>
#define endl           "\n"
#define sz(x)          ((int) x.size())
#define all(p)         p.begin(), p.end()
#define double         long double
#define que_max        priority_queue <int>
#define que_min        priority_queue <int, vi, greater<int>>
#define bug(...)       __f (#__VA_ARGS__, __VA_ARGS__)
#define print(a)       for(auto x : a) cout << x << " "; cout << endl
#define print1(a)      for(auto x : a) cout << x.F << " " << x.S << endl
#define print2(a,x,y)  for(int i = x; i < y; i++) cout<< a[i]<< " "; cout << endl

inline int power(int a, int b)
{
  int x = 1;
  while (b)
  {
    if (b & 1) x *= a;
    a *= a;
    b >>= 1;
  }
  return x;
}

template <typename Arg1>
void __f (const char* name, Arg1&& arg1) { cout << name << " : " << arg1 << endl; }
template <typename Arg1, typename... Args>
void __f (const char* names, Arg1&& arg1, Args&&... args)
{
  const char* comma = strchr (names + 1, ',');
  cout.write (names, comma - names) << " : " << arg1 << " | "; __f (comma + 1, args...);
}

const int N = 200005;

bool cmp(pii &a, pii&b){
    if(a.second!=b.second)return a.second<b.second;
    return a.first<b.first;
}

void solve() {

int n,k;
cin>>n>>k;

vpi v(n);

for (int i = 0; i < n; i++)
{
    cin>>v[i].first;
    cin>>v[i].second;
}

sort(v.begin(),v.end(),cmp);
multiset<int>s;
int ans=0;

for (int i = 0; i < k; ++i)
        s.insert(0);

    for (int i = 0; i < n; i++) {
        auto it = s.upper_bound(v[i].first);
        if (it == begin(s)) continue;
        s.erase(--it);
        s.insert(v[i].second);
        ans++;
    }

cout<<ans<<endl;

}

int32_t main()
{
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);


  clock_t z = clock();

  int t = 1;
//   cin >> t; 
  while (t--) solve();



  return 0;
}

Post a Comment

0 Comments