제출 #985137

#제출 시각아이디문제언어결과실행 시간메모리
985137IUA_Hasin서열 (APIO23_sequence)C++17
28 / 100
2062 ms59128 KiB
#include "sequence.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

#define ll                                long long

using namespace std;
using namespace __gnu_pbds;

typedef
tree<
  pair<int,int>,
  null_type,
  less<pair<int,int>>,
  rb_tree_tag,
  tree_order_statistics_node_update>
ordered_set;

// typedef tree<
// int,
// null_type,
// less<int>,
// rb_tree_tag,
// tree_order_statistics_node_update>
// ordered_set;

int sequence(int N, std::vector<int> A) {
  ll ans = 1;
  for(int i=0; i<N; i++){
    ordered_set s;
    multiset<ll> s2;
    for(int j=i; j<N; j++){
      s.insert({A[j], j});
      s2.insert(A[j]);
      ll siz = j-i+1;
      if(siz%2==1){
        ll medind = floor(siz/2);
        auto it = s.find_by_order(medind);
        ll medval = (*it).first;
        ll temp = s2.count(medval);
        ans = max(ans, temp);
      } else {
        ll medind1 = siz/2;
        ll medind2 = (siz/2)-1;
        auto it1 = s.find_by_order(medind1);
        auto it2 = s.find_by_order(medind2);
        ll medval1 = (*it1).first;
        ll medval2 = (*it2).first;
        ll temp1 = s2.count(medval1);
        ll temp2 = s2.count(medval2);
        ll temp = max(temp1, temp2);
        ans = max(ans, temp);
      }
    }
    // for(auto u : s){
    //   cout << u.first << " " << u.second << endl;
    // }
    // cout<<endl;
  }

  return ans;

        

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...