제출 #1168658

#제출 시각아이디문제언어결과실행 시간메모리
1168658rayan_bd서열 (APIO23_sequence)C++20
0 / 100
2097 ms662712 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds; const double INF = 5e18; const int mxN = 5e5+100; #define fi first #define se second #define all(v) v.begin(), v.end() pbds seg[mxN*4]; vector<int> ar; void build(int node,int start,int end){ seg[node].clear(); if(start==end){ seg[node].insert(ar[start]); return; } int mid=start+(end-start)/2; build(node*2+1,start,mid); build(node*2+2,mid+1,end); for(auto it:seg[node*2+1]) seg[node].insert(it); for(auto it:seg[node*2+2]) seg[node].insert(it); } int qry(int node,int start,int end,int l,int r,int k){ if(start>r||end<l) return 0; if(start>=l&&end<=r) return seg[node].order_of_key(k); int mid=start+(end-start)/2; return qry(node*2+1,start,mid,l,r,k)+qry(node*2+2,mid+1,end,l,r,k); } int sequence(int N,vector<int> A){ ar=A; build(0,0,N-1); map<int,pair<int,int>> mp; for(int i=0;i<N;++i){ if(!mp.count(A[i])) mp[A[i]].fi=i; mp[A[i]].se=i; } int ans=1; for(auto it:A){ int len=(mp[it].se-mp[it].fi+1); if(len==1) continue; if(len<=4) ans=2; if(len>=5){ int pos=qry(0,0,N-1,mp[it].fi+1,mp[it].se-1,it)+1; if(len&1^1){ if(pos==(len/2)) ans=2; if(pos==(len/2+1)) ans=2; ++pos; if(pos==(len/2)) ans=2; if(pos==(len/2+1)) ans=2; }else{ if(pos==len/2) ans=2; else if(pos+1==len/2) ans=2; } } } 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...