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 |
|
|
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 |