Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- typedef long long int ll;
- //#define isvowel(a) (a == 'a' || a == 'e' || a == 'i' || a == 'o' || a == 'u')
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define gcd __gcd
- #define getl(s) getline(cin, s);
- #define setpre(x) fixed << setprecision(x)
- #define mset(a) memset(a, 0, sizeof(a))
- #define endl '\n'
- const int N=100050,M=1000000007;
- const ll INF=1e18+7;
- void fastscan(int &number){
- bool negative=false;
- register int c;
- number=0;
- c=getchar();
- if(c=='-'){
- negative=true;
- c=getchar();
- }
- for(;(c>47&&c<58);c=getchar()) number=number*10+c-48;
- if(negative) number*=-1;
- }
- int bin(vector<int>a,int L,int R,int key){
- int ans,mid;
- while(L<=R){
- mid=(L+R)/2;
- if(a[mid]>=key){
- ans=mid;
- R=mid-1;
- }
- else L=mid+1;
- }
- return ans;
- }
- void LIS(vector<int>a){
- int i,n=a.size(),len=1,pos;
- vector<int>gay(n,0);
- gay[0]=a[0];
- for(i=1;i<n;++i){
- if(a[i]<gay[0]) gay[0]=a[i];
- else if(a[i]>gay[len-1]) gay[len++]=a[i];
- else gay[bin(gay,0,len-1,a[i])]=a[i];
- }
- cout<<len<<endl;
- }
- //------------------------------
- int binpos(vector<int>a,vector<int>gay,int L,int R,int key){
- int ans,mid;
- while(L<=R){
- mid=(L+R)/2;
- if(a[gay[mid]]>=key){
- ans=mid;
- R=mid-1;
- }
- else L=mid+1;
- }
- return ans;
- }
- void LIS_print(vector<int>a){
- int n=a.size(),i,len=1,pos;
- vector<int>gay(n,0),res;
- vector<int>prev(n,-1);
- for(i=1;i<n;++i){
- if(a[i]<a[gay[0]]) gay[0]=i;
- else if(a[i]>a[gay[len-1]]){
- prev[i]=gay[len-1];
- gay[len++]=i;
- }
- else{
- pos=binpos(a,gay,0,len-1,a[i]);
- prev[i]=gay[pos-1];
- gay[pos]=i;
- }
- }
- cout<<len<<endl;
- for(i=gay[len-1];i>=0;i=prev[i]) res.pb(a[i]);
- reverse(res.begin(),res.end());
- for(i=0;i<len;++i) cout<<res[i]<<" ";
- return;
- }
- int main(){
- ios_base::sync_with_stdio(NULL); cin.tie(nullptr); cout.tie(nullptr);
- // freopen("DAYCONT.inp","r",stdin);
- // freopen("DAYCONT.out","w",stdout);
- int n,i,a;
- vector<int>gay;
- cin>>n;
- while(n--){
- cin>>a;
- gay.pb(a);
- }
- LIS(gay);
- return 0;
- }
- /*
- ==================================+
- INPUT: |
- ------------------------------ |
- ------------------------------ |
- ==================================+
- OUTPUT: |
- ------------------------------ |
- ------------------------------ |
- ==================================+
- */
Add Comment
Please, Sign In to add comment