Submission #2701566
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define fbo find_by_order
#define ook order_of_key
#define f first
#define s second
#define pb push_back
#define reset(a,b) memset(a,b,sizeof a);
#define MOD 998244353
#define MID (l+r)/2
#define ALL(x) x.begin(),x.end()
#define debug(x) cout<<#x<<" = "<<(x)<<endl
#define mx 200003
#define pc(x) putchar_unlocked(x);
int state[mx*4],tree[mx*4][2],lazy[mx*4],a[mx],di[mx],n,mini[mx*4];
set<int>batas;
vector<int>ans;
void build(int idx,int l,int r){
state[idx]=1;
if(l==r){
if(l&1){
tree[idx][1]=a[l];
tree[idx][0]=1e9;
}
else{
tree[idx][0]=a[l];
tree[idx][1]=1e9;
}
mini[idx]=tree[idx][state[idx]];
return;
}
build(2*idx,l,MID);
build(2*idx+1,MID+1,r);
for(int i=0;i<2;i++)tree[idx][i]=min(tree[idx*2][i],tree[2*idx+1][i]);
mini[idx]=min(mini[idx*2],mini[2*idx+1]);
}
void pd(int idx,int l,int r){
lazy[idx]^=1;
state[idx]^=1;
mini[idx]=tree[idx][state[idx]];
}
void ganti(int idx,int l,int r,int fl,int fr){
if(fl>r || fr<l)return;
if(fl<=l && r<=fr){
lazy[idx]^=1;
state[idx]^=1;
mini[idx]=tree[idx][state[idx]];
return;
}
if(lazy[idx]){
pd(2*idx,l,MID);
pd(2*idx+1,MID+1,r);
lazy[idx]=0;
}
ganti(2*idx,l,MID,fl,fr);
ganti(2*idx+1,MID+1,r,fl,fr);
for(int i=0;i<2;i++)tree[idx][i]=min(tree[idx*2][i],tree[2*idx+1][i]);
mini[idx]=min(mini[idx*2],mini[2*idx+1]);
}
int cari(int t,int idx,int l,int r,int fl,int fr){
if(fl>r || fr<l)return 1e9;
if(fl<=l && r<=fr)return tree[idx][t];
if(lazy[idx]){
pd(2*idx,l,MID);
pd(2*idx+1,MID+1,r);
lazy[idx]=0;
}
return min(cari(t,idx*2,l,MID,fl,fr),cari(t,2*idx+1,MID+1,r,fl,fr));
}
void upd(int idx,int l,int r,int in){
if(in>r || in<l)return;
if(l==r){
mini[idx]=tree[idx][0]=tree[idx][1]=1e9;
return;
}
if(lazy[idx]){
pd(2*idx,l,MID);
pd(2*idx+1,MID+1,r);
lazy[idx]=0;
}
upd(2*idx,l,MID,in);
upd(2*idx+1,MID+1,r,in);
for(int i=0;i<2;i++)tree[idx][i]=min(tree[idx*2][i],tree[2*idx+1][i]);
mini[idx]=min(mini[idx*2],mini[2*idx+1]);
}
int main(){
cin>>n;
batas.insert(n+1);
for(int i=1;i<=n;i++){
cin>>a[i];
di[a[i]]=i;
}
build(1,1,n);
for(int i=1;i<=n;i+=2){
int x=mini[1];
int pos=di[x];
auto it=batas.lower_bound(pos);
int y=*it-1;
int t=1;
if(pos&1)t=0;
int z=cari(t,1,1,n,pos+1,y);
int cnt=0;
if(z==1e9){
while(1)cnt++;
}
// debug(x);
// debug(z);
int tmp=di[z];
ganti(1,1,n,pos+1,tmp-1);
batas.insert(pos);
batas.insert(tmp);
upd(1,1,n,pos);
upd(1,1,n,tmp);
ans.pb(x);
ans.pb(z);
}
for(int i:ans)cout<<i<<' ';
}
Submission Info
Submission Time |
|
Task |
E - Young Maids |
User |
yogahmad |
Language |
C++14 (GCC 5.4.1) |
Score |
800 |
Code Size |
2675 Byte |
Status |
AC |
Exec Time |
288 ms |
Memory |
28020 KB |
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 |
3 ms |
8448 KB |
0_01.txt |
AC |
2 ms |
6400 KB |
0_02.txt |
AC |
3 ms |
8448 KB |
1_00.txt |
AC |
2 ms |
6400 KB |
1_01.txt |
AC |
2 ms |
6400 KB |
1_02.txt |
AC |
233 ms |
28020 KB |
1_03.txt |
AC |
232 ms |
28020 KB |
1_04.txt |
AC |
269 ms |
28020 KB |
1_05.txt |
AC |
268 ms |
28020 KB |
1_06.txt |
AC |
268 ms |
28020 KB |
1_07.txt |
AC |
263 ms |
28020 KB |
1_08.txt |
AC |
265 ms |
28020 KB |
1_09.txt |
AC |
214 ms |
28020 KB |
1_10.txt |
AC |
249 ms |
28020 KB |
1_11.txt |
AC |
212 ms |
28020 KB |
1_12.txt |
AC |
265 ms |
27636 KB |
1_13.txt |
AC |
266 ms |
28020 KB |
1_14.txt |
AC |
264 ms |
27892 KB |
1_15.txt |
AC |
263 ms |
28020 KB |
1_16.txt |
AC |
264 ms |
27892 KB |
1_17.txt |
AC |
266 ms |
28020 KB |
1_18.txt |
AC |
274 ms |
27892 KB |
1_19.txt |
AC |
288 ms |
27892 KB |