Skip to content

Instantly share code, notes, and snippets.

@minhducsun2002
Last active May 5, 2018 00:45
Show Gist options
  • Save minhducsun2002/96cf49afe97fb26b45ef9bd617e54b7d to your computer and use it in GitHub Desktop.
Save minhducsun2002/96cf49afe97fb26b45ef9bd617e54b7d to your computer and use it in GitHub Desktop.
LIS using Patience Sorting
#include <bits/stdc++.h>
using namespace std;
typedef long long int llint;
const long long int LLINT_MAX = LLONG_MAX;
const long long int LLINT_MIN = LLONG_MIN;
vector <vector <llint> > sort_to_piles (vector <llint> arr)
{
vector <vector <llint> > piles;
piles.push_back(vector<llint>(0));
piles[0].push_back(arr[0]);
for (llint i = 1 ; i <= arr.size() - 1 ; i++)
{
bool arranged = false;
for (llint n = 0 ; n <= piles.size() - 1 ; n++)
{
if (piles[n].back() <= arr[i])
{
piles[n].push_back(arr[i]);
arranged = true;
break;
}
};
if (!arranged)
{
piles.push_back(vector<llint>(0));
piles.back().push_back(arr[i]);
}
};
return piles;
/*
vector <llint> lisLength; for (llint i = 0 ; i <= piles.size() - 1 ; i++) lisLength.push_back(piles[i].size());
cout << *max_element(lisLength.begin(),lisLength.end());
*/
}
int main()
{
//cout << "Enter number of elements: ";
llint arrlength; cin >> arrlength;
vector <llint> arr (arrlength);
for (llint i = 0 ; i <= arrlength - 1; i++)
{
//cout << "Element number " << i + 1 << " : ";
cin >> arr[i];// fflush(stdin);
};
vector <vector <llint> > piles = sort_to_piles(arr);
vector <llint> sizes;
for (llint i = 0 ; i <= piles.size() - 1; i++)
{
sizes.push_back(piles[i].size());
}
cout << *max_element(sizes.begin(), sizes.end());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment