Đê tính số cách em dùng Dequeue.

procedure pro(i:longint);
begin
    while (top>0) and (a[d[top]]<a[i]) do dec(top);
    inc(top);
    d[top]:=i;
    if (top>0) and (res1<d[top-1]) then res1:=d[top-1];
end;
procedure nhap;
var f:text;
    i:longint;
begin
    assign(f,fi); reset(f);
    readln(f,n,h);
    for i:=1 to n do
      begin
        read(f,a[i]);
        pro(i);
      end;
    res1:=n-res1+1;
    close(f);
end;

Tính số ngày em tính theo số Catalan. 

 j:=2;
    res:=1; n:=n+1;
    for i:=n+2 to 2*n do
      begin
        res:=res*i;
        while (j<=n) and (res mod j=0) do
          begin
            res:=res div j;
            j:=j+1;
          end;
        if j>n then res:=res mod base;
      end;

CODE: http://ideone.com/RQxSSN 

Phân tích ra thừa số nguyên tố rồi tính.

Cho mình hỏi tại sao là tính theo số Catalan ?

Trả lời deleted_user_1
  Hiện bài gốc

Theo sách giáo khoa chuyên tin. Còn tại sao thì mình chịu. Thực tế có rất nhiều số có thể ứng dụng để giải các bài toán đếm như là Số ngũ giác để giải bài KTUAN chẳng hạn. Nhưng mà hầu như tài liệu về phần này bằng Tiếng Việt không có nên đành chịu. 

Trả lời deleted_user_1
  Hiện bài gốc

Chứng minh tại sao là số Catalan khá khó. Mình thử tìm 1 hồi thì có vẻ nhất là người ta chứng minh như này:

  • Đầu tiên chứng minh số cây BST là số Catalan (có thể xem ở đây)
  • Sau đó chứng minh 1 dãy hoán vị tránh pattern 123 là 2-stack sortable và chứng minh 1 hoán vị là 2-stack sortable nếu nó tương đương với 1 BST (link)

Nói đơn giản lại là chứng minh rất khó và bài này là 1 bài đánh đố vớ vẩn, đi thi làm đc chỉ có cách duy nhất là ngồi nhìn dãy số và đoán mò ra. Hồi năm đó thi QG có 2 bạn làm đc bài này đều là do nhìn mấy số đầu biết là số Catalan, còn chứng minh đc thì mình đảm bảo 100% với khả năng học sinh cấp 3 (chuyên Tin) là không thể.

Trả lời RR
  Hiện bài gốc

RR cho e hỏi là có trang web học thuật toán= ảnh động nào mà hồi trước có share trên VNOIfb ý a??