#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; const int MAX_N=1<<17; int ans[2*MAX_N-1], part[2*MAX_N-1]; int m; void init(int n){ m=1; while(m0){ ans[k]=part[k]; if(k>n; map mn, mx; for(int i=0; i>a; if(mn.find(a)==mn.end()){ mn[a]=i; mx[a]=i; }else{ mn[a]=min(i, mn[a]); mx[a]=max(i, mx[a]); } } init(n); for(auto p:mn){ int a=p.first, i1=p.second, i2=mx[a]; update(i1, i2+1, a, 0, 0, m); } for(int i=0; i