#include <algorithm>
using namespace std;
#define MAXN 100005
#define TS 262144
static int N,R,A[MAXN],EP[MAXN];
static int sumtree[TS],erased[TS],maxtree[TS],ST=TS/2-1;
static struct NODE{
NODE(){}
NODE(int mx,int mn): max_val(mx), min_pos(mn){ }
int max_val,min_pos;
bool operator < (const NODE &ot)const{
return max_val!=ot.max_val?max_val<ot.max_val:min_pos>ot.min_pos;
}
} tree[TS],ans(0,1);
int get_real_pos(int n,int l,int r,int p)
{
int m=(l+r)>>1;
if (l == r) return m;
if (p <= sumtree[n+n]) return get_real_pos(n+n,l,m,p);
return get_real_pos(n+n+1,m+1,r,p-sumtree[n+n]);
}
void erase(int n,int l,int r,int s,int e)
{
if (r < s || l > e) return;
if (s <= l && r <= e){
erased[n] = 1;
sumtree[n] = 0;
return;
}
int m=(l+r)>>1;
erase(n+n,l,m,s,e);
erase(n+n+1,m+1,r,s,e);
if (erased[n]) sumtree[n] = 0;
else sumtree[n] = sumtree[n+n]+sumtree[n+n+1];
}
int get_max(int l,int r)
{
int ret=0;
for (;l<=r;l>>=1,r>>=1){
if (l&1) ret = max(ret,maxtree[l++]);
if (!(r&1)) ret = max(ret,maxtree[r--]);
}
return ret;
}
NODE get_max_node(int l,int r)
{
NODE ret(-1e9,-1e9);
for (;l<=r;l>>=1,r>>=1){
if (l&1) ret = max(ret,tree[l++]);
if (!(r&1)) ret = max(ret,tree[r--]);
}
return ret;
}
void set_node(int n,const NODE &val)
{
for (;n;n>>=1) tree[n] = max(tree[n],val);
}
int GetBestPosition(int n, int C, int r, int *order, int *S, int *E)
{
int i,s,e;
N = n, R = ++r;
for (i=0;i<N-1;i++) A[i+1] = ++order[i];
for (i=1;i<=N;i++) sumtree[ST+i] = 1, EP[i] = i;
for (i=ST;i;i--) sumtree[i] = sumtree[i+i]+sumtree[i+i+1];
for (i=0;i<C;i++){
++S[i]; ++E[i];
s = get_real_pos(1,1,TS>>1,S[i]);
e = get_real_pos(1,1,TS>>1,E[i]); e = EP[e];
S[i] = s; E[i] = e;
erase(1,1,TS>>1,s+1,e);
EP[s] = e;
}
for (i=1;i<N;i++) maxtree[ST+i] = A[i];
for (i=ST;i;i--) maxtree[i] = max(maxtree[i+i],maxtree[i+i+1]);
for (i=0;i<TS;i++) tree[i].max_val = -1e9;
for (i=0;i<C;i++){
if (get_max(ST+S[i],ST+E[i]-1) > R) continue;
NODE me(1,S[i]),mx;
mx = get_max_node(ST+S[i],ST+E[i]-1);
mx.max_val++;
if (me < mx) me = mx;
set_node(ST+S[i],me);
ans = max(ans,me);
}
return --ans.min_pos;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgTUFYTiAxMDAwMDUKI2RlZmluZSBUUyAyNjIxNDQKCnN0YXRpYyBpbnQgTixSLEFbTUFYTl0sRVBbTUFYTl07CnN0YXRpYyBpbnQgc3VtdHJlZVtUU10sZXJhc2VkW1RTXSxtYXh0cmVlW1RTXSxTVD1UUy8yLTE7CgpzdGF0aWMgc3RydWN0IE5PREV7CiAgICBOT0RFKCl7fQogICAgTk9ERShpbnQgbXgsaW50IG1uKTogbWF4X3ZhbChteCksIG1pbl9wb3MobW4peyB9CiAgICBpbnQgbWF4X3ZhbCxtaW5fcG9zOwogICAgYm9vbCBvcGVyYXRvciA8IChjb25zdCBOT0RFICZvdCljb25zdHsKICAgICAgICByZXR1cm4gbWF4X3ZhbCE9b3QubWF4X3ZhbD9tYXhfdmFsPG90Lm1heF92YWw6bWluX3Bvcz5vdC5taW5fcG9zOwogICAgfQp9IHRyZWVbVFNdLGFucygwLDEpOwoKaW50IGdldF9yZWFsX3BvcyhpbnQgbixpbnQgbCxpbnQgcixpbnQgcCkKewogICAgaW50IG09KGwrcik+PjE7CiAgICBpZiAobCA9PSByKSByZXR1cm4gbTsKICAgIGlmIChwIDw9IHN1bXRyZWVbbituXSkgcmV0dXJuIGdldF9yZWFsX3BvcyhuK24sbCxtLHApOwogICAgcmV0dXJuIGdldF9yZWFsX3BvcyhuK24rMSxtKzEscixwLXN1bXRyZWVbbituXSk7Cn0KCnZvaWQgZXJhc2UoaW50IG4saW50IGwsaW50IHIsaW50IHMsaW50IGUpCnsKICAgIGlmIChyIDwgcyB8fCBsID4gZSkgcmV0dXJuOwogICAgaWYgKHMgPD0gbCAmJiByIDw9IGUpewogICAgICAgIGVyYXNlZFtuXSA9IDE7CiAgICAgICAgc3VtdHJlZVtuXSA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG09KGwrcik+PjE7CiAgICBlcmFzZShuK24sbCxtLHMsZSk7CiAgICBlcmFzZShuK24rMSxtKzEscixzLGUpOwogICAgaWYgKGVyYXNlZFtuXSkgc3VtdHJlZVtuXSA9IDA7CiAgICBlbHNlIHN1bXRyZWVbbl0gPSBzdW10cmVlW24rbl0rc3VtdHJlZVtuK24rMV07Cn0KCmludCBnZXRfbWF4KGludCBsLGludCByKQp7CiAgICBpbnQgcmV0PTA7CiAgICBmb3IgKDtsPD1yO2w+Pj0xLHI+Pj0xKXsKICAgICAgICBpZiAobCYxKSByZXQgPSBtYXgocmV0LG1heHRyZWVbbCsrXSk7CiAgICAgICAgaWYgKCEociYxKSkgcmV0ID0gbWF4KHJldCxtYXh0cmVlW3ItLV0pOwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKTk9ERSBnZXRfbWF4X25vZGUoaW50IGwsaW50IHIpCnsKICAgIE5PREUgcmV0KC0xZTksLTFlOSk7CiAgICBmb3IgKDtsPD1yO2w+Pj0xLHI+Pj0xKXsKICAgICAgICBpZiAobCYxKSByZXQgPSBtYXgocmV0LHRyZWVbbCsrXSk7CiAgICAgICAgaWYgKCEociYxKSkgcmV0ID0gbWF4KHJldCx0cmVlW3ItLV0pOwogICAgfQogICAgcmV0dXJuIHJldDsKfQoKdm9pZCBzZXRfbm9kZShpbnQgbixjb25zdCBOT0RFICZ2YWwpCnsKICAgIGZvciAoO247bj4+PTEpIHRyZWVbbl0gPSBtYXgodHJlZVtuXSx2YWwpOwp9CgppbnQgR2V0QmVzdFBvc2l0aW9uKGludCBuLCBpbnQgQywgaW50IHIsIGludCAqb3JkZXIsIGludCAqUywgaW50ICpFKQp7CiAgICBpbnQgaSxzLGU7CiAgICBOID0gbiwgUiA9ICsrcjsKICAgIGZvciAoaT0wO2k8Ti0xO2krKykgQVtpKzFdID0gKytvcmRlcltpXTsKICAgIGZvciAoaT0xO2k8PU47aSsrKSBzdW10cmVlW1NUK2ldID0gMSwgRVBbaV0gPSBpOwogICAgZm9yIChpPVNUO2k7aS0tKSBzdW10cmVlW2ldID0gc3VtdHJlZVtpK2ldK3N1bXRyZWVbaStpKzFdOwogICAgZm9yIChpPTA7aTxDO2krKyl7CiAgICAgICAgKytTW2ldOyArK0VbaV07CiAgICAgICAgcyA9IGdldF9yZWFsX3BvcygxLDEsVFM+PjEsU1tpXSk7CiAgICAgICAgZSA9IGdldF9yZWFsX3BvcygxLDEsVFM+PjEsRVtpXSk7IGUgPSBFUFtlXTsKICAgICAgICBTW2ldID0gczsgRVtpXSA9IGU7CiAgICAgICAgZXJhc2UoMSwxLFRTPj4xLHMrMSxlKTsKICAgICAgICBFUFtzXSA9IGU7CiAgICB9CiAgICBmb3IgKGk9MTtpPE47aSsrKSBtYXh0cmVlW1NUK2ldID0gQVtpXTsKICAgIGZvciAoaT1TVDtpO2ktLSkgbWF4dHJlZVtpXSA9IG1heChtYXh0cmVlW2kraV0sbWF4dHJlZVtpK2krMV0pOwogICAgZm9yIChpPTA7aTxUUztpKyspIHRyZWVbaV0ubWF4X3ZhbCA9IC0xZTk7CiAgICBmb3IgKGk9MDtpPEM7aSsrKXsKICAgICAgICBpZiAoZ2V0X21heChTVCtTW2ldLFNUK0VbaV0tMSkgPiBSKSBjb250aW51ZTsKICAgICAgICBOT0RFIG1lKDEsU1tpXSksbXg7CiAgICAgICAgbXggPSBnZXRfbWF4X25vZGUoU1QrU1tpXSxTVCtFW2ldLTEpOwogICAgICAgIG14Lm1heF92YWwrKzsKICAgICAgICBpZiAobWUgPCBteCkgbWUgPSBteDsKICAgICAgICBzZXRfbm9kZShTVCtTW2ldLG1lKTsKICAgICAgICBhbnMgPSBtYXgoYW5zLG1lKTsKICAgIH0KICAgIHJldHVybiAtLWFucy5taW5fcG9zOwp9Cg==