Submission #63446

#TimeUsernameProblemLanguageResultExecution timeMemory
63446knon0501조화행렬 (KOI18_matrix)C++14
9 / 100
4105 ms242616 KiB
#include <bits/stdc++.h> using namespace std; #define f first #define s second int n,m; const int MX=2e5+5; pair<int,pair<int,int>> a[MX]; unordered_map<long long,int> seg; unordered_map<int,int> xx; unordered_map<int,int> yy; long long nn; int ans; int p; inline int g(int y,int lev1){ stack<int> S; S.push(1); S.push(nn); S.push(1); int k=0; while(!S.empty()){ int lv=S.top();S.pop(); int r=S.top();S.pop(); int l=S.top();S.pop(); if(l>=y)continue; if(r<y)k=max(k,seg[nn*2*lev1+lv]); else{ S.push(l); S.push((l+r)/2); S.push(lv*2); S.push((l+r)/2+1); S.push(r); S.push(lv*2+1); } } return k; } inline int f(int x,int y){ stack<int> S; S.push(1); S.push(nn); S.push(1); int k=0; while(!S.empty()){ int lv=S.top();S.pop(); int r=S.top();S.pop(); int l=S.top();S.pop(); if(l>=x)continue; if(r<x)k=max(k,g(y,lv)); else{ S.push(l); S.push((l+r)/2); S.push(lv*2); S.push((l+r)/2+1); S.push(r); S.push(lv*2+1); } } return k; } void process(){ int i,j; for(nn=1 ; nn<n ; nn*=2); for(i=1 ; i<=n ; i++)cin>>a[i].f; for(i=1 ; i<=n ; i++)cin>>a[i].s.f; for(i=1 ; i<=n ; i++)cin>>a[i].s.s; sort(a+1,a+n+1); set<int> S1; set<int> S2; for(i=1 ; i<=n ; i++){ S1.insert(a[i].s.f); S2.insert(a[i].s.s); } int cnt=0; for(auto &i:S1)xx[i]=++cnt; cnt=0; for(auto &i:S2)yy[i]=++cnt; for(int ii=1 ; ii<=n ; ii++){ int k=f(xx[a[ii].s.f],yy[a[ii].s.s])+1; for(i=nn+xx[a[ii].s.f]-1 ; i>=1 ; i/=2){ for(j=nn+yy[a[ii].s.s]-1 ; j>=1 ; j/=2) if(seg[nn*2*i+j]<k) seg[nn*2*i+j]=k; else break; } ans=ans>k?ans:k; } cout<<ans; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>m>>n; if(m==3)process(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...