import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.Comparator; import java.util.NoSuchElementException; import java.util.PriorityQueue; class Edge { int src,dst,cst; public Edge(int src_,int dst_,int cst_) { src=src_; dst=dst_; cst=cst_; } } public class Main { public static void main(String[] args) { new Main().run(); } int dist(int id, int fst, int snd) { if (Integer.compare(fst, snd)==Integer.compare(fst, id)) { return 2*Math.abs(fst-id)-1; } else { return 2*Math.abs(fst-id); } } int id(int dist, int fst, int snd) { int sign=Integer.compare(fst, snd)*(1-dist%2*2); return fst+(dist+1)/2*sign; } boolean disjoint(int id, boolean[] on) { boolean ret=true; for(int i=Math.max(0, id-1);i<=Math.min(on.length-1, id+1);++i) { ret&=!on[i]; } return ret; } void run() { FastScanner sc=new FastScanner(); int N=sc.nextInt(); int fst=sc.nextInt()-1; int snd=sc.nextInt()-1; int Q=sc.nextInt(); int[] ans=new int[Q]; Arrays.fill(ans, -1); PriorityQueue disjoint=new PriorityQueue<>(); PriorityQueue adjacent=new PriorityQueue<>(); for(int i=0;iv[0])); Arrays.sort(out, Comparator.comparing(v->v[0])); boolean[] on=new boolean[N]; int u=0,v=0; while(u!=Q || v!=Q) { if(out[u][0]<=in[v][0]) { // out[u]を実行 int id=ans[out[u][1]]; on[id]=false; if(disjoint(id, on)) disjoint.add(dist(id,fst,snd)); else adjacent.add(dist(id,fst,snd)); ++u; }else{ // in[v]を実行 while(!disjoint.isEmpty() && (!disjoint(id(disjoint.peek(),fst,snd), on) || on[id(disjoint.peek(),fst,snd)])) { disjoint.poll(); } if(disjoint.isEmpty()&&adjacent.isEmpty()) { in[v][0]=out[u][0]; continue; } int dist=!disjoint.isEmpty()?disjoint.poll():adjacent.poll(); int id=id(dist,fst,snd); if(on[id]) continue; ans[in[v][1]]=id; on[id]=true; for(int i=Math.max(0, id-1);i<=Math.min(N-1, id+1);++i) { if(!on[i] && !disjoint(i, on)) adjacent.add(dist(i, fst, snd)); } ++v; } } PrintWriter pw=new PrintWriter(System.out); for(int i=0;i Integer.MAX_VALUE) throw new NumberFormatException(); return (int) nl; } public double nextDouble() { return Double.parseDouble(next());} }