#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; bool rcmp(int a, int b) { return a>b; } typedef long long LL; typedef struct { int l, r, a; } RNode; RNode rs[100004]; bool mycmp(const RNode& a, const RNode& b) { return a.ae) return; s+=mx; e+=mx; while(s<=e) { if (s&1) { ix[s]=min(ix[s], v); s++; } if ((e&1)==0) { ix[e]=min(ix[e], v); e--; } s>>=1; e>>=1; } } int findm(int s) { s+=mx; int r=ix[s]; while(s) { r=min(r, ix[s]); s>>=1; } return r; } int main() { int n, i, j, l, r, q, a; int inf=0x7fffffff, b, k; int s, e, ki, ns, ne; scanf("%d", &n); for (i=0; ie) { setm(e+1, ns-1, b); s=ns; e=ne; } else e=max(e, ne); } setm(e+1, q-1, b); } else { setm(0, q-1, b); break; } i=j; b++; } setm(0, q-1, b); for (i=0; i