序列自动机
非常好用的算法,可以在O(1)的时间复杂度判断i后面x第一次出现的位置。
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int a[50],nxt[100010][50],pre[50];
int main()
{
int i,j,n;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i];
}
memset(pre,-1,sizeof(pre)); //初始化赋值-1
for(i=n;i>=0;i--)
{
for(j=0;j<10;j++)
{
nxt[i][j]=pre[j];
}
pre[a[i]]=i;
}
//cout<<nxt[0][2]<<endl;
//nxt[i][x]表示第i个下标后面x第一次出现的位置。找不到返回-1
return 0;
}