QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#666388 | #7685. Barkley II | i0stream | WA | 83ms | 16208kb | C++14 | 1.9kb | 2024-10-22 18:07:38 | 2024-10-22 18:07:53 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int N=5*1e5+100;
int n,m,ans,T,a[N],fa[N],tr[N],vis[N];
map<int,int> pre;
struct node{
int a,id;
}p[N];
struct Qr{
int mns,l,r,id,s;
}tmp[N];
struct Itv{
int l,r;
}q[N];
inline bool cmp(node x,node y){
if (x.a==y.a) return x.id<y.id;
else return x.a>y.a;
}
inline bool cmp2(Qr x,Qr y){
return x.r<y.r;
}
inline bool cmp3(Qr x,Qr y){
return x.id<y.id;
}
int find(int x){
if (fa[x]!=x) fa[x]=find(fa[x]);
return fa[x];
}
void Union(int x,int y){
int rx=find(x),ry=find(y);
fa[rx]=ry;
q[ry]=(Itv){q[rx].l,q[ry].r};
}
inline int lowbit(int x){return x&(-x);}
void modify(int x,int k){
while (x<=n){
tr[x]+=k;
x+=lowbit(x);
}
}
int query(int x){
int cnt=0;
while (x){
cnt+=tr[x];
x-=lowbit(x);
}
return cnt;
}
int main(){
scanf("%d",&T);
while (T--){
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) vis[i]=0,tr[i]=0;
ans=0;
for (int i=1;i<=n;i++){
scanf("%d",&a[i]);
p[i].a=a[i];p[i].id=i;
}
sort(p+1,p+n+1,cmp);
int spc=1;p[n+1].a=0;p[0].a=1e9;
for (int i=n;i>=0;i--){
if (p[i].a-p[i+1].a>1){
spc=p[i+1].a+1;
break;
}
}
//cout<<spc<<endl;
for (int i=1;i<=n;i++) fa[i]=i,q[i]=(Itv){i,i};
for (int i=1;i<=n;i++){
int j=p[i].id; vis[j]=1;
if (j>1 && vis[j-1]) Union(j-1,j);
if (j<n && vis[j+1]) Union(j,j+1);
Itv curq=q[find(j)];
tmp[i]=(Qr){a[j]-1,curq.l,curq.r,i,0};
if (a[j]==1) tmp[i].mns=spc;
}
sort(tmp+1,tmp+n+1,cmp2);
pre.clear();
for (int i=1,j=1;i<=n;i++){
while (j<=tmp[i].r){
if (pre.find(a[j])!=pre.end()) modify(pre[a[j]],-1);
modify(j,1);
pre[a[j]]=j;
j++;
}
tmp[i].s=query(tmp[i].r)-query(tmp[i].l-1);
}
int mx=0;
for (int i=1;i<=n;i++){
mx=max(mx,tmp[i].s);
ans=max(ans,mx-tmp[i].mns);
}
printf("%d\n",ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 16208kb
input:
2 5 4 1 2 2 3 4 5 10000 5 2 3 4 1
output:
2 3
result:
ok 2 number(s): "2 3"
Test #2:
score: -100
Wrong Answer
time: 83ms
memory: 16204kb
input:
50000 10 19 12 6 1 12 11 15 4 1 13 18 10 8 8 7 6 7 6 2 2 3 4 8 10 6 3 2 6 6 5 2 3 4 5 6 10 11 6 3 7 9 2 1 2 10 10 4 10 6 6 1 2 6 1 1 3 4 2 1 10 9 8 5 3 9 1 7 5 5 1 1 10 5 1 4 3 2 5 4 5 3 5 2 10 14 3 8 12 10 4 2 3 13 7 3 10 14 5 5 12 2 8 1 13 9 8 5 10 7 5 5 6 6 1 5 3 7 3 4 10 7 5 1 4 6 1 6 4 3 7 5 10...
output:
6 5 4 4 2 4 3 7 4 4 4 5 2 3 2 6 7 5 7 6 5 5 4 3 6 8 7 2 5 4 6 2 3 3 4 5 3 3 7 3 2 5 6 2 3 5 3 3 3 8 6 5 5 7 4 4 5 4 5 5 6 3 5 3 4 3 3 7 7 6 5 7 4 3 3 4 1 6 3 4 6 6 4 4 5 7 4 5 7 5 3 4 2 2 4 6 6 8 4 3 4 5 4 5 7 7 3 1 6 5 3 5 4 4 5 6 6 5 6 7 7 4 5 6 4 7 4 7 6 1 6 5 3 2 5 3 2 3 6 5 4 4 5 5 4 3 0 6 6 5 ...
result:
wrong answer 15th numbers differ - expected: '6', found: '2'