蓝桥杯游园安排

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std; 
const int maxn = 1e6+10;
const int INF = 0x3f3f3f3f;
vector<string> v;
vector<string> rec;
int path[maxn];
int main(void)
{
    char ch;
    string s;
    cin >> ch;
    s = ch;
    while(cin >> ch)
    {
        if(ch>='A'&&ch<='Z')v.push_back(s),s = ch;
        else s+=ch;
    }
    v.push_back(s);
    
    rec.push_back("");
    for(int i = 0;i<v.size();i++)
    {
        if(v[i]>rec.back())
        {
            rec.push_back(v[i]);
            path[i] = rec.size()-1;
        }
        else
        {
            int u = lower_bound(rec.begin(),rec.end(),v[i])-rec.begin();
            path[i] = u;
            rec[u] = v[i];
        }
    }
    
    int m = rec.size()-1;
    vector<string> vv;
    for(int i = v.size()-1;i>=0;i--)
    {
        if(m==path[i])
        {
            vv.push_back(v[i]);
            m--;
        }
    }
    for(int i = vv.size()-1;i>=0;i--)
        cout << vv[i];
    return 0;
} 

 

posted @ 2021-06-03 17:38  loliconsk  阅读(86)  评论(0)    收藏  举报