This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int lowbit(int x){return x&-x;}
struct BIT{
vector<int>bit;
int MX;
void init(int len){
for(int i=0;i<=len+100;i++){
bit.push_back(0);
}
MX=len;
}
void upd(int pl,int vl){
while(pl<=MX){
bit[pl]+=vl;
pl+=lowbit(pl);
}
}
int qsum(int pl){
int ret=0;
while(pl){
ret+=bit[pl];
pl-=lowbit(pl);
}
return ret;
}
int k_th(int k){
int lg=__lg(MX);
int cnt=0;
int nw=0;
for(int i=lg;i>=0;i--){
if(cnt+bit[nw+(1<<i)]<k){
nw+=(1<<i);
cnt+=bit[nw];
}
}
return nw+1;
}
};
int n;
int ar[500005];
int freq[500005];
int lpl[500005];
int rpl[500005];
int far[500005];
int slv(){
int ans=0;
for(int i=1;i<=n;i++){
lpl[i]=0;rpl[i]=0;
freq[i]=0;
}
for(int i=1;i<=n;i++){
freq[ar[i]]++;
if(lpl[ar[i]]==0){
lpl[ar[i]]=i;
}
rpl[ar[i]]=i;
}
for(int i=1;i<=n;i++){
int it=i;
while(it+1<=n&&ar[it+1]==ar[i]){it++;}
ans=max(ans,it-i+1);
i=it;
}
for(int i=1;i<=n;i++){
if(freq[i]==0){continue;}
int len=rpl[i]-lpl[i]+1;
int r=rpl[i];int l=lpl[i];
int f=freq[i];
if((f+l-1+n-r)>=len-f){
ans=max(ans,f);
}
}
return ans;
return ans;
}
int sequence(int N, std::vector<int> A) {
n=N;
for(int i=0;i<n;i++){
ar[i+1]=A[i];
}
return slv();
return 0;
}
/*
signed main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>ar[i];
}
cout<<slv();
return 0;
}
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |