#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<<18; const int INF=1100000000; int mn[2*MAX_N-1], part[2*MAX_N-1]; int m; void init(int n){ m=1; while(m>n; init(n+1); for(int i=0; i>a; int i1=1, i2=n+1; while(i1!=i2){ int i0=(i1+i2)/2; if(find(0, i0+1, 0, 0, m)>=a-i) i1=i0+1; else i2=i0; } update(i1-1, n+1, a-i-1, 0, 0, m); } int i1=1, i2=n+1; while(i1!=i2){ int i0=(i1+i2)/2; if(find(0, i0+1, 0, 0, m)>=INF) i1=i0+1; else i2=i0; } cout<