QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#883462#8240. Card GameReqCxmChtChrWA 0ms6100kbC++143.9kb2025-02-05 16:31:072025-02-05 16:31:09

Judging History

This is the latest submission verdict.

  • [2025-02-05 16:31:09]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 6100kb
  • [2025-02-05 16:31:07]
  • Submitted

answer

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
//#define int long long
#define ll long long
#define ull unsigned ll
#define db double
#define ldb long db
#define mp make_pair
#define fi first
#define se second
#define pii pair<int,int>
#define pbI push_back
#define inf 1e18
#define mdI int mid=(l+r)>>1
#define lowbit(x) ((x)&(-(x)))
#define ppc(x) __builtin_popcount(x)
#define rep(a,b,c) for(signed a=b;a<=c;a++)
#define vep(a,b,c) for(int a=b;a>=c;a--)
#define MAXN 300010
#define gint __int128
#define MOD 1000000009//998244353
int qread(){
	char o=getchar();int f=1,x=0;
	for(;!isdigit(o);o=getchar())if(o=='-')f*=-1;
	for(;isdigit(o);o=getchar())x=x*10+o-'0';
	return f*x;
}
ll qp(ll a,ll b,ll p=MOD){
    ll bs=a,rs=1;while(b){if(b&1)rs=rs*bs%p;bs=bs*bs%p;b>>=1;}return rs;
}
template<typename T> void chmx(T &x,T y){if(y>x)x=y;}
template<typename T> void chmi(T &x,T y){if(y<x)x=y;}
template<typename T> void chmd(T &x,T y,T m=MOD){x=(x+y)%MOD;}
//void chmd(ll &x,ll y,ll m=MOD){x=(x+y)%m;}
bool FLA;
int n,q;
int a[MAXN],nxt[MAXN];
int wh[MAXN];
int rt[MAXN],cnt;
int ren(int &x){return x?x:x=++cnt;}
int tg[MAXN<<5],ls[MAXN<<5],rs[MAXN<<5];
int Rve;
void bui(int &x,int od,int l,int r,int p){
    x=++cnt;tg[x]=tg[od],ls[x]=ls[od],rs[x]=rs[od];
    if(l==r)return;mdI;
    if(p<=mid)bui(ls[x],ls[od],l,mid,p);
    else{bui(rs[x],rs[od],mid+1,r,p);}
}
int rew(int &x){
    if(x<Rve){int y=++cnt;tg[y]=tg[x],ls[y]=ls[x],rs[y]=rs[x];return x=y;}
    return x;
}
void ins(int &x,int od,int l,int r,int p,int va){
    if(x<Rve){x=++cnt;tg[x]=tg[od],ls[x]=ls[od],rs[x]=rs[od];}
    if(l==r){tg[x]=va;return;}mdI;
    if(p<=mid)ins(ls[x],ls[od],l,mid,p,va);
    else{ins(rs[x],rs[od],mid+1,r,p,va);}
}
void pd(int x){
    if(tg[x]){
        tg[rew(ls[x])]+=tg[x];
        tg[rew(rs[x])]+=tg[x];
        tg[x]=0;
    }
}
void repl(int &x,int od,int rd,int l,int r,int ql,int qr,int va){
    if(x<Rve){x=++cnt;tg[x]=tg[od],ls[x]=ls[od],rs[x]=rs[od];}
    if(l==ql&&r==qr){tg[x]=tg[rd]+va,ls[x]=ls[rd],rs[x]=rs[rd];return;}mdI;pd(x);
    if(qr<=mid){repl(ls[x],ls[od],ls[rd],l,mid,ql,qr,va);}
    else if(ql>mid){repl(rs[x],rs[od],rs[rd],mid+1,r,ql,qr,va);}
    else{
        repl(ls[x],ls[od],ls[rd],l,mid,ql,mid,va);
        repl(rs[x],rs[od],rs[rd],mid+1,r,mid+1,qr,va);
    }
}
int que(int x,int l,int r,int p){
    if(!x)return 0;
    int b=tg[x];
    if(l==r){return b;}mdI;
    if(p<=mid)return b+que(ls[x],l,mid,p);
    else{return b+que(rs[x],mid+1,r,p);}
}
bool FLB;
signed main(){
    cerr<<((&FLB)-(&FLA))/1024.0/1024<<endl;
    n=20,q=3e5;
    cin>>n>>q;
    //rep(i,1,n)a[i]=((ll)rand())*rand()%n+1;
    rep(i,1,n)a[i]=qread();
    //rep(i,1,n)cout<<a[i]<<" ";cout<<endl;
    vep(i,n,1){
        nxt[i]=wh[a[i]];wh[a[i]]=i;
        bui(rt[i],rt[i+1],1,n,i);
        Rve=rt[i];
        if(nxt[i]){
            ins(rt[i],rt[i+1],1,n,nxt[i],nxt[i]-i+1);
            if(nxt[i]<n)
            repl(rt[i],rt[i+1],rt[nxt[i]+1],1,n,nxt[i]+1,n,nxt[i]-i+1);
        }
        //cerr<<cnt<<" "<<n-i+1<<endl;
    }
    //cerr<<cnt<<endl;
    int lst=0;
    while(q--){
        //int l=rand()%n+1,r=rand()%(n-l+1)+l;
        int l=qread()^lst,r=qread()^lst;
        l^=lst,r^=lst;
        int rs=que(rt[l],1,n,r);lst=(r-l+1-rs);
        printf("%d\n",lst);
        //if(lst<0){cerr<<l<<" "<<r<<endl;assert(1==0);}
    }
}
/*
20 1
8 1 17 5 9 6 8 12 11 13 5 7 5 17 11 3 19 9 14 11
2 20

15 1
1 17 5 9 6 8 12 11 13 5 7 5 17 11 3
1 15
DS真爽
主席树也行,rt[l]中下标r表示[l,r]的答案,对于i先继承rt[i+1],nxt后的区间由rt[nxt]替换且区间减1
标记永久化,repl的过程不会修改已经有的点
说句实话,(抛开复杂度)分块真的好,预处理保持在块内时有哪些需要决策的地方
*/

详细

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 6100kb

input:

5 5
3 3 1 1 1
5 5
3 4
3 3
0 5
3 5

output:

1
0
1
6
1

result:

wrong answer 2nd numbers differ - expected: '2', found: '0'