#include #include #include #include #include #include using namespace std; short int tree[4000100][12], add[4000100], qtr[4000100]; short int a[1000100], tmp[20]; int n, m; int q[6]; int d(int x, int rt) { int xx=x, l=0; while (xx>0) xx/=10, l++; xx=x; for (int i=l-1; i>=0; i--) q[i]=xx%10, xx/=10; int res=0; for (int i=rt; imed ) modify(2*v+2, med+1, r, st, fin, rt); if ( st<=med && fin>med ) modify(2*v+1, l, med, st, med, rt), modify(2*v+2, med+1, r, med+1, fin, rt); calc(v); } int query(int v, int l, int r, int st, int fin) { if ( l==st && r==fin ) { return tree[v][qtr[v]]; } int med=(l+r)/2, ansl=0, ansr=0; push(v); if ( fin<=med ) ansl=query(2*v+1, l, med, st, fin); if ( st>med ) ansr=query(2*v+2, med+1, r, st, fin); if ( st<=med && fin>med ) ansl=query(2*v+1, l, med, st, med), ansr=query(2*v+2, med+1, r, med+1, fin); return max(ansl, ansr); } int main() { scanf("%d", &n); for (int i=0; i