BWPOINTS - VOI 2011 Nối điểm đen trắng

Tác giả: RR

Ngôn ngữ: C++

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <string>
#include <deque>
#include <complex>

#define FOR(i,a,b) for(int i=(a),_b=(b); i<=_b; i++)
#define FORD(i,a,b) for(int i=(a),_b=(b); i>=_b; i--)
#define REP(i,a) for(int i=0,_a=(a); i<_a; i++)
#define ll long long
#define F first
#define S second
#define PB push_back
#define MP make_pair
using namespace std;

const double PI = acos(-1.0);

pair<int,int> a[200111];
int n, f[200111];

int main() {
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    scanf("%d", &n);
    FOR(i,1,n) {
        scanf("%d", &a[i].F);
        a[i].S = -1;
    }
    FOR(i,n+1,n+n) {
        scanf("%d", &a[i].F);
        a[i].S = 1;
    }
    n += n;
    sort(a+1, a+n+1);
    
    f[0] = 0;
    f[1] = 0;
    int res = 0;
    FOR(i,2,n) {
        if (a[i].S == a[i-1].S) f[i] = f[i-1];
        else f[i] = max(f[i-1], 1 + f[i-2]);
        res = max(res, f[i]);
    }
    cout << res;
    return 0;
}

Download