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 n;
int oar[500005];
pair<pair<int,int>,int>sar[500005];
pair<pair<int,int>,int>tar[500005];
int ans;
void slv(int l,int r){
if(l==r){return;}
if(l>r){return;}
int mi=(l+r)/2;
slv(l,mi);slv(mi+1,r);
int lmn=1e9;
int lit=l;int rit=mi+1;
for(int i=l;i<=r;i++){
if( ((rit==r+1)||(lit<=mi&&sar[lit].first.second<=sar[rit].first.second))){
tar[i]=sar[lit];
lmn=min(lmn,sar[lit].second);
lit++;
}else{
tar[i]=sar[rit];
ans=max(ans,sar[rit].second-lmn);
rit++;
}
}
for(int i=l;i<=r;i++){
sar[i]=tar[i];
}
}
int fslv(){
vector<pair<int,int>>vseq;
map<int,int>frq;
for(int i=1;i<=n;i++){
frq[oar[i]]++;
}
for(auto it=frq.begin();it!=frq.end();it++){
vseq.push_back({(*it).second,(*it).first});
}sort(vseq.begin(),vseq.end());
reverse(vseq.begin(),vseq.end());
ans=1;
for(int j=0;j<vseq.size();j++){
int v=vseq[j].second;
if(vseq[j].first<=ans){continue;}
for(int i=0;i<=n;i++){
sar[i]=sar[max(i-1,0)];
if(oar[i]<v){
sar[i].first.first--;
}else{
sar[i].first.first++;
}
if(oar[i]>v){
sar[i].first.second--;
}else{
sar[i].first.second++;
}
if(oar[i]==v){
sar[i].second++;
}
}
sort(sar+0,sar+n+1);
slv(0,n);
}
return ans;
}
int sequence(int N, std::vector<int> A) {
n=N;
for(int i=0;i<n;i++){
oar[i+1]=A[i];
}
return fslv();
return 0;
}
/*
signed main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>oar[i];
}
ans=1;
for(int v=1;v<=3;v++){
for(int i=0;i<=n;i++){
sar[i]=sar[max(i-1,0)];
if(oar[i]<v){
sar[i].first.first--;
}else{
sar[i].first.first++;
}
if(oar[i]>v){
sar[i].first.second--;
}else{
sar[i].first.second++;
}
if(oar[i]==v){
sar[i].second++;
}
}
sort(sar+0,sar+n+1);
slv(0,n);
}
cout<<ans<<endl;
return 0;
}
*/
Compilation message (stderr)
sequence.cpp: In function 'int fslv()':
sequence.cpp:46:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
46 | for(int j=0;j<vseq.size();j++){
| ~^~~~~~~~~~~~
# | 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... |