RT。卡了一晚上了,一直在 Test6 TLE,吐了。
代码:
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
char *p1, *p2, buf[100000];
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++)
inline int read() {
register int x = 0; register char c = gc();
while (c < 48 || c > 57) c = gc();
while (c >= 48 && c <= 57) x = (x << 1) + (x << 3) + c - 48, c = gc();
return x;
}
#define eps 1e-8
const int inf=0x3f3f3f3f;
mt19937 rnd(time(0));
const int Maxn=3e5+10;
int n,q;
struct BIT{
#define lowbit(x) (x&(-x))
long long C[Maxn];
void modify(int pos,int x)
{
while(pos<=n)
{
C[pos]+=x;
pos+=lowbit(pos);
}
}
long long query(int pos)
{
long long res=0;
while(pos)
{
res+=C[pos];
pos-=lowbit(pos);
}
return res;
}
}seg[20];
int Ar[Maxn];
long long chk(int l,int r,int k)
{
return seg[k].query(r)-seg[k].query(l-1);
}
unordered_map<int,int> mp[20];
signed main()
{
n=read();
q=read();
for(register int i=1;i<=n;i++)
{
Ar[i]=read();
int gen=Ar[i];
seg[0].modify(i,Ar[i]);
mp[0][gen]=gen;
for(register int j=1;j<=19;j++)
{
int p;
if(mp[j][gen]) p=mp[j][gen];
else p=rnd()%300000+1,mp[j][gen]=p;
seg[j].modify(i,p);
}
}
while(q--)
{
int opt;
opt=read();
if(opt==1)
{
int p,x;
p=read();x=read();
int gen=Ar[p];
Ar[p]=x;
int genx=x;
for(register int k=0;k<=19;k++)
{
int now=mp[k][gen];
seg[k].modify(p,-now);
int G=mp[k][genx];
if(G==0)
{
G=rnd()%300000+1;
mp[k][genx]=G;
}
seg[k].modify(p,G);
}
}else{
int l,r,k;
l=read(),r=read(),k=read();
bool flag=true;
for(register int j=0;j<=19;j++)
{
if(chk(l,r,j)%k!=0)
{
flag=false;
}
}
puts(flag?"YES":"NO");
}
}
return 0;
}