QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#945277#4320. riapqWanyeTL 5536ms18164kbC++203.2kb2025-03-20 20:15:372025-03-20 20:15:45

Judging History

This is the latest submission verdict.

  • [2025-03-20 20:15:45]
  • Judged
  • Verdict: TL
  • Time: 5536ms
  • Memory: 18164kb
  • [2025-03-20 20:15:37]
  • Submitted

answer

#include<bits/stdc++.h>
#define ll int
#define N 200005
using namespace std;
inline char nc(){
	static char buf[1000000],*p=buf,*q=buf;
	return p==q&&(q=(p=buf)+fread(buf,1,1000000,stdin),p==q)?EOF:*p++;
}
inline ll read(){
	ll res = 0,w = 1;
	char c = nc();
	while(c<'0'||c>'9')w=(c=='-'?-1:w),c=nc();
	while(c<='9'&&c>='0')res=res*10+c-'0',c=nc();
	return res*w;
}
char obuf[1<<21],*p3=obuf; 
inline void pc(char c){ 
	p3-obuf<=(1<<20)?(*p3++=c):(fwrite(obuf,p3-obuf,1,stdout),p3=obuf,*p3++=c); 
} 
inline void write(long long x){ 
	if(x<0) pc('-'),x=-x; 
	if(x>9) write(x/10); 
	pc(x%10+'0'); 
}
ll n,m,i,j,a[N],opt[N],l[N],r[N],x[N],K,id[N],ls[N],rs[N],now,tr[N],cnt[N],qzh[N],cntt[N],tr2[N];
long long ans[N];
inline void add(ll k,ll x,ll n,ll *tr){while(k<=n) tr[k]+=x,k+=k&(-k);}
inline ll query(ll k,ll *tr){
    ll num = 0;
    while(k) num+=tr[k],k-=k&(-k);
    return num;
}
inline void solve(ll idd){
    ll lt = ls[idd],rt = rs[idd];
    for(ll i=1;i<=n;i++) qzh[i]=0;
    for(ll i=lt;i<=rt;i++) qzh[a[i]]++,add(a[i],1,n,tr),cntt[i]=query(a[i],tr);
    for(ll i=lt;i<=rt;i++) add(a[i],-1,n,tr);
    for(ll i=1;i<=n;i++) qzh[i]+=qzh[i-1];
    ll nums = 0,num = 0;
    for(ll i=1;i<=m;i++){
        if(opt[i]==1){
            if(id[l[i]]==id[r[i]]) continue;
            if(id[l[i]]<idd&&idd<id[r[i]]){
                nums++,num++;
                add(r[i],1,n,tr);
            }
            if(idd==id[l[i]]+1) for(ll j=l[i];j<=rs[id[l[i]]];j++) add(a[j],1,n,tr2);
            if(idd==id[r[i]]) for(ll j=l[i];j<=rs[id[l[i]]];j++) add(a[j],-1,n,tr2);
        }
        else{
            if(lt<=x[i]&&x[i]<=rt) ans[i]+=1ll*cntt[x[i]]*nums;
            else if(x[i]>rt){
                ll cnt = num-query(x[i]-1,tr);
                ans[i]+=1ll*cnt*qzh[a[x[i]]];
            }
            if(id[x[i]]>=idd){
                ans[i]+=query(a[x[i]],tr2);
            }
        }
    }
    for(ll i=1;i<=n;i++) tr[i]=0,tr2[i]=0;
}
int main(){
    ll c1 = clock();
	n=read(),m=read(),K=sqrt(n);
    for(i=1;i<=n;i++) a[i]=read();
    for(i=1;i<=m;i++){
        opt[i]=read();
        if(opt[i]==1) l[i]=read(),r[i]=read();
        else x[i]=read();
    }
    for(i=1,now=1;i<=n;i++){
        id[i]=now;
        if(!ls[id[i]]) ls[id[i]]=i;
        rs[id[i]]=i;
        if(i%K==0) now++;
    }
    for(i=1;i<=m;i++){
        if(opt[i]==1){
            if(id[l[i]]==id[r[i]]){
                for(j=l[i];j<=r[i];j++){
                    add(a[j],1,n,tr);
                    cnt[j]+=query(a[j],tr);
                }
                for(j=l[i];j<=r[i];j++) add(a[j],-1,n,tr);
            }
            else{
                for(j=l[i];j<=rs[id[l[i]]];j++) add(a[j],1,n,tr),cnt[j]+=query(a[j],tr);
                for(j=ls[id[r[i]]];j<=r[i];j++) add(a[j],1,n,tr),cnt[j]+=query(a[j],tr);
                for(j=l[i];j<=rs[id[l[i]]];j++) add(a[j],-1,n,tr);
                for(j=ls[id[r[i]]];j<=r[i];j++) add(a[j],-1,n,tr);
            }
        }
        if(opt[i]==2) ans[i]+=cnt[x[i]];
    }
    for(i=1;i<=id[n];i++) solve(i);
    for(i=1;i<=m;i++) if(opt[i]==2) write(ans[i]),pc('\n');
    ll c2 = clock();
    cerr<<"time is "<<c2-c1<<endl;
	return fwrite(obuf,p3-obuf,1,stdout),0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4122ms
memory: 17412kb

input:

199996 200000
143310 37562 185256 74036 165695 188854 131250 156513 127376 132842 37011 94837 14198 179358 163588 147494 37044 153839 33220 144385 12461 51737 98260 95675 124990 68296 16398 164708 91697 73599 157565 3026 190923 149455 9058 1817 50526 46356 190219 80257 186444 167065 106374 26203 673...

output:

0
29029
153483
174748
18100
50160
21136
469
243175
62600
251423
9954
110092
34003
291621
152987
412819
799472
855213
457254
107684
605001
639107
35877
242230
603421
234530
39340
9419
35936
126567
1457
63214
1191355
33746
30645
224183
903628
209849
36208
1587635
1172538
204995
628038
2138963
174439
2...

result:

ok 129824 lines

Test #2:

score: 0
Accepted
time: 5536ms
memory: 18164kb

input:

199999 199995
186953 81421 29612 49107 105873 6161 172369 100604 174305 174653 29355 159211 38434 39511 93082 168318 107336 92549 173910 125665 66800 192444 198621 47871 77573 176518 157768 61622 183845 164641 193333 98653 169171 184247 137826 177699 55234 112377 124666 179543 173584 188762 66050 14...

output:

0
74669
47917
4580
0
0
0
70542
117312
53317
162298
134138
34339
123241
7830
28284
45427
165277
54898
139985
44311
387244
233937
57119
161687
105290
317562
46640
645950
318352
127759
6261
688122
451294
251859
430562
36692
103899
136030
583326
478803
16052
471642
94444
294769
229242
855782
366961
8332...

result:

ok 65982 lines

Test #3:

score: -100
Time Limit Exceeded

input:

200000 200000
159904 188287 107426 108536 158786 71650 32253 97199 89533 193857 11347 193487 199986 126891 186960 82120 153858 58461 189107 149139 51771 177023 33188 165942 193247 45821 186409 39008 79417 184825 170526 181313 92492 90139 37561 89527 57773 126629 45046 6882 190225 191160 162995 26304...

output:


result: