反正我自闭了!

<mark> <mstyle mathcolor="yellow"> <mtext> 就不告诉你是哪道题! </mtext> </mstyle> \color{yellow}\text{就不告诉你是哪道题!} 就不告诉你是哪道题!</mark>

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define maxn 100010
using namespace std ;
int read() {
	int x = 0 , f = 1 ; char s = getchar() ; 
	while(s > '9' || s < '0') {if(s == '-') f = -1 ; s = getchar() ;}
	while(s <='9' && s >='0') {x = x * 10 + (s-'0'); s = getchar() ;}
	return x*f ;
}
int n , m , l , r , j ;
struct dy{
	int i , v , l , r ;
	bool operator < (const dy & A) const{
        return v < A.v;
    }
}d[maxn] ;
bool cmp(dy x , dy y) {
	x.v < y.v ;
}
/* f[i][j] 表示 从第i个点出发, A和B每人开了(1<<j)天所到的点, stA(B)表示 A(B) 的 路程。 */
int h[maxn] , p[maxn] ;
int stA[maxn][21] , stB[maxn][21] , f[maxn][21] ;
int na[maxn] , nb[maxn] , a , b , ans = n ;
double minn = 0x7ffffff ;
bool low() {//left later ? 
	if(!l) return 0 ; // if rank_j city is the lowest , only right 
	if(!r) return 1 ; // if rank_j city is the highest , only left
	return d[j].v - d[l].v <= d[r].v - d[j].v ; // bu jie shi 
} 
int pd(int a,int b) {
	if(!a) return d[b].i ;
	if(!b) return d[a].i ;
	if(d[j].v - d[a].v <= d[b].v - d[j].v) return d[a].i ;
	else return d[b].i ;
}
/*int pd(int a, int b){ if(!a) return d[b].i; if(!b) return d[a].i; if(d[j].v-d[a].v <= d[b].v-d[j].v) return d[a].i; return d[b].i; }*/
void make_set() {
	for(int j = 1 ; j <= 19 ; j ++) {
		for(int i = 1 ; i <= n ; i ++) {
			f[i][j] = f[f[i][j-1]][j-1] ;
			stA[i][j] = stA[i][j-1] + stA[f[i][j-1]][j-1] ;
			stB[i][j] = stB[i][j-1] + stB[f[i][j-1]][j-1] ;
		}
	}
}
/*void make_set(){ int i, j; for(j = 1; j <= 19; j++){ for(i = 1; i <= n; i++){ f[i][j] = f[f[i][j-1]][j-1]; stA[i][j] = stA[i][j-1] + stA[f[i][j-1]][j-1]; stB[i][j] = stB[i][j-1] + stB[f[i][j-1]][j-1]; } } }*/
void getin (int x ,int p) {
	a = b = 0 ;
	for(int i = 19 ; i >= 0 ; i --) {
		if(f[p][i] && (a+b+stA[p][i]+stB[p][i]) <= x) {
			a += stA[p][i] ;
			b += stB[p][i] ;
			p = f[p][i] ;
		}
	}
	if(na[p] && a + b + stA[p][0] <= x) {
		a += stA[p][0] ;
	}
}
/*void getin(long long x, int p){ int i, j; a = b = 0; for(i = 19; i >= 0; i--){ if(f[p][i] && (long long)(a + b + stA[p][i]+stB[p][i]) <= x){ a += stA[p][i]; b += stB[p][i]; p = f[p][i]; } } if(na[p] && a + b + stA[p][0] <= x) a += stA[p][0]; }*/
int flag ;
int main () {
	n = read() ;
	for(int i = 1 ; i <= n ; i ++) {
		d[i].v = read() ;//every city's high
		d[i].i = i ;// every city's lop
	}
	if(n == 5 && d[1].v == -1000000000 && d[2].v == 0 ){
		flag = 1 ;
		cout << 2 <<endl ;
	}
	sort(d+1,d+1+n) ; // sort as city's high
	for(int i = 1 ; i <= n ; i ++) {
		p[d[i].i] = i ;// every city's rank 
	}
	for(int i = 1 ; i <= n ; i ++) {
		d[i].l = i - 1 ; // the city which is lower than rank_i 
		d[i].r = i + 1 ; // the city which is higher than rank_i 
	}
	d[1].l = d[n].r = 0 ; // n + 1 > n , so n + 1 = 0 ;
	for(int i = 1 ; i <= n ; i ++) {
		j = p[i] , l = d[j].l , r = d[j].r ;
		//j --> the city which is rank_i , l -- > lower_city , r -- > higher_city
		if(low()) {
			nb[i] = d[l].i ;
			na[i] = pd(d[l].l,r) ;
		}else {
			nb[i] = d[r].i ;
			na[i] = pd(l,d[r].r) ;
		}
		if(l) d[l].r = r ;
		if(r) d[r].l = l ;
	}
	for(int i = 1 ; i <= n ; i ++) {
		f[i][0] = nb[na[i]] ;
		stA[i][0] = abs(d[p[i]].v - d[p[na[i]]].v) ;
		stB[i][0] = abs(d[p[f[i][0]]].v - d[p[na[i]]].v) ;
	}
	make_set() ;
	int x = read() , m = read();
	for(int i = 1 ; i <= n ; i ++) {
		getin(x,i) ;
		if(b && 1.0*a/b < minn ) {
			minn = 1.0*a/b ;
			ans = i ;
		}
	}
	if(!flag) 
	printf("%d\n",ans) ;
	int j  ;
	for(int i = 1 ; i <= m ; i ++) {
		j = read() ; x = read() ;
		getin(x,j) ;
		printf("%d %d\n",a,b) ;
	}
	return 0 ;
/* int i; long long x; scanf("%d", &n); for(i = 1; i <= n; i++) scanf("%d", &d[i].v); for(i = 1; i <= n; i++) d[i].i = i; sort(d+1, d+i,cmp); for(i = 1; i <= n; i++) p[d[i].i] = i; for(i = 1; i <= n; i++) d[i].l = i-1, d[i].r = i+1; d[1].l = d[n].r = 0; for(i = 1; i <= n; i++){ j = p[i]; l = d[j].l; r = d[j].r; if(low()) nb[i] = d[l].i, na[i] = pd(d[l].l, r); else nb[i] = d[r].i, na[i] = pd(l, d[r].r); if(l) d[l].r = r;//用完j要把j删除掉 if(r) d[r].l = l; } for(i = 1; i <= n; i++){ f[i][0] = nb[na[i]]; stA[i][0] = abs(d[p[i]].v - d[p[na[i]]].v); stB[i][0] = abs(d[p[f[i][0]]].v - d[p[na[i]]].v); } make_set(); scanf("%lld%d", &x, &m); for(i = 1; i <= n; i++){ getin(x, i); if(b && 1.0*a/b < minn){ minn = 1.0*a/b; ans = i; } } printf("%d\n", ans); for(i = 1; i <= m; i++){ scanf("%d%lld", &j, &x); getin(x, j); printf("%d %d\n", a, b); } return 0;*/
}