现在我有这样一个子序列自动机类:
class SQAM{private:vector<unsigned>a[N];unsigned char c[N];
public:unsigned n;
void init(){for(int i=1;i<=n;++i)a[c[i]].resize(0);cin>>n>>c+1;
for(int i=1,x;i<=n;++i)cin>>x,a[x].emplace_back(i);}
inline unsigned operator[][](cit i,cit j){return *upper_bound(a[j].begin(),a[j].end(),i);}
};
很明显这个重载二维下标运算符的函数是不能编译的,但是我想表达的意思表达明白了,像这样,我就是想实现这种不是仅仅像重载矩阵的下标运算符那样返回一个指针就能做到的怎么办,当然,这相比一般的子序列自动机的主席树写法来说绝对是不慢的,不用和我说用主席树实现,不过说起主席树,主席树是可以用来维护一些二维信息的,那我怎么把主席树的查询重载为一个类似二维数组的形式,所以不管怎么说,我都想知道怎么解决这个问题而不是逃避这个问题。
bdfs 无果,只能搜到矩阵的那种形如这样的重载:
class A{public:unsigned a[N][N];
inline unsigned*operator[](cit&i){return a[i];}};
显然无法达到我要的效果,为防止歧义,这里放一下所有宏定义等东西。
#include <bits/stdc++.h>
#define cit const register unsigned
#define open ios::sync_with_stdio(0),cin.tie(0),cout.tie(0),freopen("1.in","r",stdin),freopen("1.out","w",stdout)
#define int register unsigned
#define ll long long
#define void inline void
using namespace std;constexpr unsigned N=1e5+1,p=998244353;