P10785 [NOI2024] 集合
如果一个区间是合法的,那么它的所有子区间都合法;由此可以双指针预处理出
如果存在一组映射,其中
由此可以定义两个集合:
当
结合上述双指针,现在每次需要修改
(具体实现时可以用 unsigned long long 自然溢出。)
当
以下是去除了头文件的完整代码:
const int N=2e5+10,M=6e5+10;
int n,m,q,a[N][3],b[N][3],mx[N]; unsigned ll hsh[N],sa[M],sb[M],A,B; mt19937_64 rng((ll)(new char));
inline void chg(int x){
for(int p=0;p<3;++p){
A-=sa[a[x][p]],sa[a[x][p]]^=hsh[x],A+=sa[a[x][p]];
B-=sb[b[x][p]],sb[b[x][p]]^=hsh[x],B+=sb[b[x][p]];
}
}
signed main(){
n=read(),m=read(),q=read();
for(int i=1;i<=n;++i) a[i][0]=read(),a[i][1]=read(),a[i][2]=read();
for(int i=1;i<=n;++i) b[i][0]=read(),b[i][1]=read(),b[i][2]=read();
for(int i=1;i<=n;++i) hsh[i]=rng();
for(int l=1,r=0;l<=n;chg(l++)){
while(r<=n&&A==B) chg(++r); mx[l]=r;
}
for(int l,r;q;--q) l=read(),r=read(),puts((r<mx[l])?"Yes":"No");
return 0;
}