#include #include #include #include #include using namespace std; long long din[10001][2]; void rekurs(vector &ats, int nuo, int iki, int pos, int ej){ //cout << nuo << " " << iki << " " << pos << " " << ej << endl; int siz=iki-nuo; if(siz<0){ return; } if(siz==0){ ats[pos]=nuo; return; } if(siz==1){ ats[pos]=nuo; ats[pos+1]=iki; return; } ej-=siz; for(int i = 0;i<=siz/2;i++){ if(din[i][0]+din[siz-i][0]<=ej and ej<=din[i][1]+din[siz-i][1]){ ats[pos]=nuo+i; rekurs(ats,nuo, nuo+i-1,pos+1,min(ej-din[i][0],din[i][0])); rekurs(ats,nuo+i+1, iki,pos+1+i,max(ej-din[i][0],din[i][0])); return; } } exit(1); } int main() { din[1][0]=0; din[1][1]=0; din[0][0]=0; din[0][1]=0; for(int i = 2;i<=10000;i++){ din[i][1]=din[i-1][1]+i-1; din[i][0]=i-1+din[(i-1)/2][0]; if((i-1)%2==0){ din[i][0]+=din[(i-1)/2][0]; }else{ din[i][0]+=din[i/2][0]; } } /*for(int i = 1;i<=5;i++){ cout << din[i][0]<<" " <> t; while(t--){ int len, c; cin >> len >> c; if(din[len][0]<=c and c<=din[len][1]){ vector ats(len); rekurs(ats,1,len, 0, c); for(int i = 0;i