ull xs[2d5]; ll ys[2d5]; ll ls[2d5],rs[2d5]; ll d(ll i,ll j){ return abs(ls[ys[j]]-ls[ys[i]])+abs(rs[ys[j]]-rs[ys[i]]); } void opt1(ll b){ rep(i,2d5-1-b){ if(d(i,i+1)+d(i+b,i+b+1)>d(i,i+b)+d(i+1,i+b+1)){ reverse(ys+(i+1),ys+(i+1+b)); } } } { Timer timer; timer.set(); ll@n,@q,@wt,@st,@w[n]; rep(i,q){ ll@--l,@--r; ls[i]=l; rs[i]=r; ull x=0; rep(32){ x<<=2; if(r<1d5){ x|=0; (l,r)=(l,r); }else if(l>=1d5){ x|=3; (l,r)=(l-1d5,r-1d5); }else if(l+r<2d5){ x|=1; (l,r)=(r-1d5,1d5-1-l); }else{ x|=2; (l,r)=(2d5-1-r,l); } l*=2; r*=2; } xs[i]=x; ys[i]=i; } sortA(q,xs,ys); rrep(i,4096){ long k=i%512+2; opt1(k); if(timer.get()>=4.95){ break; } } rep(i,q){ ys[i]+=1; } wt(ys(q)); }