这题正着来做很麻烦

这 么 想 , 删 掉 后 缀 后 , 字 符 串 的 字 典 序 只 减 不 增 这么想,删掉后缀后,字符串的字典序只减不增 ,,

所 以 , 第 n 个 字 符 串 一 定 不 会 删 后 缀 所以,第n个字符串一定不会删后缀 ,n

那 么 检 查 第 n − 1 个 后 缀 , 删 掉 一 些 让 它 小 于 等 于 第 n 个 字 符 串 那么检查第n-1个后缀,删掉一些让它小于等于第n个字符串 n1,n

以 此 类 推 . . . . . . . . . 以此类推......... .........

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
string s[maxn];
int n;
void run(int q,int w)
{
	//保证s[q]>=s[w]
	//因为s[q]应该比较大,所以是去删掉s[w]的一些后缀 
	if(s[q]>=s[w])	return;//字典序大于等于,满足条件了 
	int len1=s[w].length(),len2=s[q].length();
	for(int i=0;i<len1;i++)
	if(s[w][i]>s[q][i])
	{
		s[w].erase(i,len1-i);
		return;
	}
}
int main()
{
	std::ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i=1;i<=n;i++)	cin >> s[i];
	for(int i=n;i>=2;i--)	run(i,i-1); 
	for(int i=1;i<=n;i++)	cout<<s[i]<<"\n";
}