我没研究过心理学,但你只WA/TLE前十个点时,请你耐心一点,不要搞暴戾语言,禁赛三年:
bool operator <(interval a,interval b)
{
if(belong[a.l]!=belong[b.l])return belong[a.l]<belong[b.l];
else if(belong[a.r]!=belong[b.r])return belong[a.r]<belong[b.r];
else return a.time<b.time;
}
void travel(int t,int i)
{
if(ops[t].pos>=querys[i].l&&ops[t].pos<=querys[i].r)
{
del(arr[ops[t].pos]);
add(ops[t].val);
}
swap(ops[t].val,arr[ops[t].pos]);
}
然而我的t是时间指针,导致调用的++t和t−−全失效了,调了三天嘞。
正确姿势:
void travel(int poss,int i)
{
if(ops[poss].pos>=querys[i].l&&ops[poss].pos<=querys[i].r)
{
del(arr[ops[poss].pos]);
add(ops[poss].val);
}
swap(ops[poss].val,arr[ops[poss].pos]);
}
void add(int pos)
{
if(cnt[pos]==0)res++;
cnt[pos]++;
}
void del(int pos)
{
cnt[pos]--;
if(cnt[pos]==0)res--;
}
请你务必检查调用,它应该如下所示:
while(l>querys[i].l)add(arr[--l]);
while(r>querys[i].r)del(arr[r--]);
while(r<querys[i].r)add(arr[++r]);
while(l<querys[i].l)del(arr[l++]);
请认真思考arr[i]和i所代表的意义
while(l>querys[i].l)add(arr[--l]);
while(r>querys[i].r)del(arr[r--]);
while(r<querys[i].r)add(arr[++r]);
while(l<querys[i].l)del(arr[l++]);
while(t<querys[i].time)travel(++t,i);
while(t>querys[i].time)travel(t--,i);
ans[querys[i].id]=res;
CSP-S 2024 rp++
NOIP 2024 rp++
HNOI 2025 rp++
NOI 2025 rp++