// adjacent in-order fraction: p ~= 256 * (#inorder)/(n-1)
static volatile unsigned char pages[257*4096];
void sort(unsigned *a, int n) {
unsigned long long c = 0;
for (int i = 1; i < n; i++) if (a[i] >= a[i-1]) c++;
int p = (int)(c / ((unsigned long long)(n - 1) / 256));
for (int i = 0; i <= p; i++) pages[i*4096] = (unsigned char)i;
}