QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#708953 | #7685. Barkley II | texiw | WA | 0ms | 36432kb | C++20 | 2.3kb | 2024-11-04 10:09:36 | 2024-11-04 10:09:38 |
Judging History
answer
// #pragma GCC optimize(2)
// #pragma GCC optimize(3, "Ofast", "inline")
#include <bits/stdc++.h>
using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned int;
const int N=1e6+7;
int n,m;
int rt[N];
int tot=1;//????,???
struct Node{
int l=0,r=0;//????,??l,r(???????)
int cnt=0;
} t[N*24];
void insert(int x,int val,int l,int r,int& u,int v){
u=++tot,t[u]=t[v];//????
t[u].cnt+=val;
if(l==r)return;
int m=(l+r)/2;
if(x<=m)insert(x,val,l,m,t[u].l,t[v].l);//???? | ???????????????????
else insert(x,val,m+1,r,t[u].r,t[v].r);
}
// int query(int u,int v,int l,int r,int x,int y){
// if(x<=l&&y>=r)return t[v].cnt-t[u].cnt;
// if(x>r||y<l)return 0;
// int m=(l+r)/2;
// return query(t[u].l,t[v].l,l,m,x,y)+query(t[u].r,t[v].r,m+1,r,x,y);
// }//530ms
// int query(int u,int v){
// return t[v].cnt-t[u].cnt;
// }
int query(int v,int l,int r,int x){
if(x>n)return INT_MIN;
if(l==r)return t[v].cnt;
int m=(l+r)/2;
if(x<=m)return t[t[v].r].cnt+query(t[v].l,l,m,x);
return query(t[v].r,m+1,r,x);
}//270ms
int a[N],pre[N];
std::vector<std::vector<int>> pos(N);
std::vector<int> vis(N),pt(N,-1);
signed main() {
std::cin.tie(0)->sync_with_stdio(0);
int t;std::cin>>t;
while(t--){
std::cin>>n>>m;
int ans=INT_MIN;
for(int i=1;i<=n;++i){
std::cin>>a[i];
if(!pre[a[i]])insert(i,1,1,n,rt[i],rt[i-1]);
else{
insert(pre[a[i]],-1,1,n,rt[i],rt[i-1]);
insert(i,1,1,n,rt[i],rt[i]);
}
pre[a[i]]=i;
pos[a[i]].push_back(i);
vis[a[i]]=1;
}
for(int i=1;i<=n;++i){
int l=pt[a[i]]!=-1?pos[a[i]][pt[a[i]]]:0,r=i-1;++l;
ans=std::max(ans,query(rt[r],1,n,l)-a[i]);
++pt[a[i]];
}
for(int i=1;i<=n;++i){
int l=pos[a[i]][pt[a[i]]]+1,r=n;
ans=std::max(ans,query(rt[r],1,n,l)-a[i]);
}
for(int i=1;i<=n;++i){
if(!vis[i]){
ans=std::max(ans,::t[rt[n]].cnt-i);
break;
}
}
std::cout<<ans<<'\n';
tot=1;
for(int i=1;i<=n;++i){
pre[a[i]]=0;
pos[a[i]].clear();
vis[a[i]]=0;
pt[a[i]]=-1;
}
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 36432kb
input:
2 5 4 1 2 2 3 4 5 10000 5 2 3 4 1
output:
2147483644 2147483647
result:
wrong answer 1st numbers differ - expected: '2', found: '2147483644'