#include <bits/stdc++.h>
using namespace std;
const double INF = 5e18;
const int mxN = 5e5+100;
#define fi first
#define se second
#define all(v) v.begin(), v.end()
int seg[mxN*4];
void update(int node,int start,int end,int idx,int val,bool fix){
if(start==end){
if(fix) seg[node]=val;
else seg[node]+=val;
return;
}
int mid=start+(end-start)/2;
if(idx<=mid) update(node*2+1,start,mid,idx,val,fix);
else update(node*2+2,mid+1,end,idx,val,fix);
seg[node]=seg[node*2+1]+seg[node*2+2];
}
int qry(int node,int start,int end,int l,int r){
if(start>r||end<l) return 0ll;
if(start>=l&&end<=r) return seg[node];
int mid=start+(end-start)/2;
return qry(node*2+1,start,mid,l,r)+qry(node*2+2,mid+1,end,l,r);
}
int n;
int find_val(int pos){
int st=1,en=n,ans=1;
while(st<=en){
int mid=st+(en-st)/2;
if(qry(0,1,n,1,mid)>=pos){
ans=mid;
en=mid-1;
}else{
st=mid+1;
}
}
return ans;
}
int sequence(int N,vector<int> A){
n=N;
int ans=1;
for(int i=0;i<N;++i){
map<int,int> mp;
for(int j=i;j<N;++j){
++mp[A[j]];
update(0,1,n,A[j],1,0);
if((j-i+1)&1){
ans=max(ans,mp[find_val((j-i+2)/2)]);
}else{
ans=max(ans,mp[find_val((j-i+1)/2)]);
ans=max(ans,mp[find_val((j-i+1)/2+1)]);
}
}
for(int j=i;j<N;++j) update(0,1,N,A[j],0,1);
}
for(auto it:A) update(0,1,N,it,0,1);
return ans;
}
# | 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... |