# High Card Low Card Help (Greedy Algorithms with Sorting) [2015 USACO December Gold 1]

My code below works for the 6 cases but times out for the next 9 cases. What can I do to make my code more efficient? Please ask if you need clarifications regarding my code.

#include <bits/stdc++.h>

using namespace std;

int n;

int main() {

``````ios_base::sync_with_stdio(0); cin.tie(0);

freopen("cardgame.in","r",stdin);

freopen("cardgame.out","w",stdout);

cin >> n;

vector<int> elsH, elsL;

vector<int> bes1, bes2;

for (int i=0; i<n/2; i++) {

int curr;

cin >> curr;

elsH.push_back(curr);

}

for (int i=0; i<n/2; i++) {

int curr;

cin >> curr;

elsL.push_back(curr);

}

int add = 0;

for (int i=1; i<=2*n; i++) {

if (!count(elsH.begin(),elsH.end(),i)&&!count(elsL.begin(),elsL.end(),i)) {

if(add >= n/2) {

bes1.push_back(i);

} else {

bes2.push_back(i);

}

}

}

int points = 0;

for (auto x : elsH) {

auto it = upper_bound(bes1.begin(),bes1.end(),x);

if(*it && it !=bes1.end()) {

points++;

bes1.erase(it);

} else {

bes1.erase(bes1.begin());

continue;

}

}

for (auto x : elsL) {

auto it = upper_bound(bes2.begin(),bes2.end(),x);

if (it == bes2.begin()) {

bes2.pop_back();

continue;

} else {

points++;

it--;

bes2.erase(it);

}

}

cout << points;
``````

}