QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#945277 | #4320. riapq | Wanye | TL | 5536ms | 18164kb | C++20 | 3.2kb | 2025-03-20 20:15:37 | 2025-03-20 20:15:45 |
Judging History
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...