zoukankan      html  css  js  c++  java
  • Codeforces Round #620 (Div. 2) D

     

    构造一个排列,要求相邻之间的数满足给定的大小关系,然后构造出两个序列,一个序列是所有可能的序列中LIS最长的,一个所有可能的序列中LIS最短的

    最短的构造方法:我们考虑所有单调递增的部分,可以发现要让他LIS最小那么就必须要让每一个部分满足前面的比后面的大

    最长的构造方法:考虑单调递减的部分,每一个部分都只能选择一个,因此我们要满足后面的部分的值都比前面的大

     代码是官方题解的,自己写了半天写不出来

    #include <bits/stdc++.h>
    using namespace std;
    
    const int MAX_N = 200000;
    int ans[MAX_N + 5];
    
    int main()
    {
    	int tc;
    	cin >> tc;
    	while (tc--)
    	{
    		int n, i, j;
    		string s;
    		cin >> n >> s;
    
    		int num = n, last = 0;
    		for (i = 0; i < n; i++)
    		{
    			if (i == n - 1 || s[i] == '>')
    			{
    				for (j = i; j >= last; j--)
    					ans[j] = num--;
    				last = i + 1;
    			}
    		}
    		for (i = 0; i < n; i++)
    			cout << ans[i] << (i == n - 1 ? '
    ' : ' ');
    
    		num = 1, last = 0;
    		for (i = 0; i < n; i++)
    		{
    			if (i == n - 1 || s[i] == '<')
    			{
    				for (j = i; j >= last; j--)
    					ans[j] = num++;
    				last = i + 1;
    			}
    		}
    		for (i = 0; i < n; i++)
    			cout << ans[i] << (i == n - 1 ? '
    ' : ' ');
    	}
    }
    

      

  • 相关阅读:
    JMM简述
    spring简读
    Linux常用命令
    基于java的八大排序实现
    数据库事务说明
    BIO、NIO、AIO区别与联系
    ThreadLocal 是什么?有哪些使用场景?
    ConcurrentHashMap 和 Hashtable 比较,为什么推荐使用ConcurrentHashMap?
    sychronized设计原理
    MySQL索引详解
  • 原文地址:https://www.cnblogs.com/033000-/p/12322341.html
Copyright © 2011-2022 走看看