QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#883466#8240. Card GameReqCxmChtChrWA 2ms10780kbC++143.9kb2025-02-05 16:32:202025-02-05 16:32:20

Judging History

This is the latest submission verdict.

  • [2025-02-05 16:32:20]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 10780kb
  • [2025-02-05 16:32:20]
  • 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: 100
Accepted
time: 1ms
memory: 3968kb

input:

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

output:

1
2
1
0
1

result:

ok 5 number(s): "1 2 1 0 1"

Test #2:

score: 0
Accepted
time: 1ms
memory: 5944kb

input:

7 7
2 4 1 2 3 1 2
1 6
0 4
3 3
0 4
0 3
0 6
2 7

output:

2
1
1
1
2
3
0

result:

ok 7 numbers

Test #3:

score: -100
Wrong Answer
time: 2ms
memory: 10780kb

input:

10000 10000
160 120 157 1393 1368 911 449 735 662 698 480 730 1184 768 1291 1012 834 61 1925 642 1401 1681 441 367 1498 1215 1969 1895 857 304 400 524 1138 846 810 885 68 1737 199 90 321 1109 980 1097 1936 1482 753 1796 1787 1939 291 1201 1025 367 980 1785 1781 276 1774 777 861 967 1428 1060 1300 32...

output:

8
31
35
76
35
9
63
27
30
38
72
22
133
45
71
92
22
49
25
47
56
30
32
87
90
31
50
56
76
108
69
60
56
90
104
59
107
40
53
46
50
82
92
20
34
85
90
-88
-6841
1924
35
133
86
90
14
27
25
67
38
27
41
92
34
53
63
143
64
92
56
66
66
20
5
65
61
48
102
27
57
18
26
63
18
62
78
51
45
23
47
52
57
108
13
25
69
18
3...

result:

wrong answer 48th numbers differ - expected: '8', found: '-88'