Submission #1488151


Source Code Expand

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
#include<map>
#include<queue>
#include<cassert>
#define PB push_back
#define MP make_pair
#define sz(v) (in((v).size()))
#define forn(i,n) for(in i=0;i<(n);++i)
#define forv(i,v) forn(i,sz(v))
#define fors(i,s) for(auto i=(s).begin();i!=(s).end();++i)
#define all(v) (v).begin(),(v).end()
using namespace std;
typedef long long in;
typedef vector<in> VI;
typedef vector<VI> VVI;
struct segtree{
  in MX;
  const in inf=10000000000LL;
  vector<pair<in,in> > mxp;
  VI lft,rgt;
  pair<in,in> comb(pair<in,in> a, pair<in,in> b){
    if(a.first<b.first)
      return a;
    return b;
  }
  pair<in,in> mnin(in l, in r, in id=1){
    if(r<lft[id] || l>rgt[id])return MP(inf,0);
    if(l<=lft[id] && r>=rgt[id])return mxp[id];
    return comb(mnin(l,r,2*id),mnin(l,r,2*id+1));
  }
  void ini(in n,VI hv){
    MX=1;
    while(MX<n)
      MX*=2;
    mxp.resize(2*MX);
    forv(i,mxp)
      mxp[i]=MP(inf,i-MX);
    forn(i,n)
      mxp[i+MX].first=hv[i];
    lft=rgt=VI(2*MX);
    forn(i,MX)
      lft[i+MX]=rgt[i+MX]=i;
    for(in i=MX-1;i>=1;--i){
      lft[i]=lft[2*i];
      rgt[i]=rgt[2*i+1];
      mxp[i]=comb(mxp[2*i],mxp[2*i+1]);
    }
  }
};
vector<pair<in,in> > res;
segtree par[2];
map<pair<in,in>,vector<pair<in,in> > > unlck;
priority_queue<pair<in,in> > q;
void genpairs(in l, in r, pair<in,in> pp){
  assert((r-l+1)%2==0);
  if(l>=r)
    return;
  pair<in,in> c=par[l%2].mnin(l,r);
  pair<in,in> d=par[(l+1)%2].mnin(c.second+1,r);
  unlck[pp].PB(MP(c.first,d.first));
  genpairs(l,c.second-1,MP(c.first,d.first));
  genpairs(c.second+1,d.second-1,MP(c.first,d.first));
  genpairs(d.second+1,r,MP(c.first,d.first));
}
void mkn(pair<in,in> u){
  vector<pair<in,in> >& v=unlck[u];
  forv(i,v)
    q.push(MP(-v[i].first,v[i].second));
}
int main(){
  ios::sync_with_stdio(0);
  cin.tie(0);
  in n;
  cin>>n;
  VI p[2];
  in a;
  forn(z,n){
    cin>>a;
    p[z%2].PB(a);
    p[(z+1)%2].PB(1e9);
  }
  par[0].ini(n,p[0]);
  par[1].ini(n,p[1]);
  genpairs(0,n-1,MP(0,0));
  mkn(MP(0,0));
  forn(zz,n/2){
    pair<in,in> u=q.top();
    u.first=-u.first;
    q.pop();
    res.PB(u);
    mkn(u);
  }
  forv(i,res)
    cout<<res[i].first<<" "<<res[i].second<<" ";
  cout<<"\n";
  return 0;
}

Submission Info

Submission Time
Task E - Young Maids
User w4yneb0t
Language C++14 (GCC 5.4.1)
Score 800
Code Size 2357 Byte
Status AC
Exec Time 170 ms
Memory 71240 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 800 / 800
Status
AC × 3
AC × 23
Set Name Test Cases
Sample 0_00.txt, 0_01.txt, 0_02.txt
All 0_00.txt, 0_01.txt, 0_02.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt
Case Name Status Exec Time Memory
0_00.txt AC 1 ms 256 KiB
0_01.txt AC 1 ms 256 KiB
0_02.txt AC 1 ms 256 KiB
1_00.txt AC 1 ms 256 KiB
1_01.txt AC 1 ms 256 KiB
1_02.txt AC 152 ms 71240 KiB
1_03.txt AC 139 ms 70728 KiB
1_04.txt AC 168 ms 70728 KiB
1_05.txt AC 159 ms 50120 KiB
1_06.txt AC 164 ms 49864 KiB
1_07.txt AC 153 ms 50120 KiB
1_08.txt AC 170 ms 49864 KiB
1_09.txt AC 143 ms 70728 KiB
1_10.txt AC 160 ms 65992 KiB
1_11.txt AC 146 ms 65096 KiB
1_12.txt AC 154 ms 49408 KiB
1_13.txt AC 159 ms 49996 KiB
1_14.txt AC 156 ms 49756 KiB
1_15.txt AC 164 ms 49872 KiB
1_16.txt AC 160 ms 49876 KiB
1_17.txt AC 159 ms 49992 KiB
1_18.txt AC 156 ms 49756 KiB
1_19.txt AC 160 ms 49756 KiB