Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCINCSEQ/
1. Đề bài BCINCSEQ spoj PTIT
Cho dãy số nguyên A = (a1, a2, …, an). Hãy tìm một đoạn dài nhất gồm các phần tử liên tiếp trong dãy A có thứ tự không giảm
Quy ước: Đoạn chỉ gồm đúng 1 phần tử trong A cũng được coi là có thứ tự không giảm
Dữ liệu:
l Dòng 1 chứa số nguyên dương n ≤ 105
l Dòng 2 chứa n số nguyên a1, a2, …, an (“i: |ai| ≤ 109) cách nhau ít nhất một dấu cách
Kết quả:một số nguyên duy nhất là số phần tử trong đoạn tìm được
Ví dụ
INPUT | OUTPUT |
1188 99 11 22 22 33 11 66 33 44 77
| 4 |
2. Hướng dẫn BCINCSEQ spoj PTIT
– Gọi F[i] là độ dài xâu con liên tiếp dài nhất kết thúc tại phần tử có giá trị là A[i].
– Nếu a[i]>=A[i-1] thì F[i]:=F[i-1]+1
– Ngược lại F[i]:=1
Kết quả bài toán là F[n].
Khởi tạo F[0]=0; A[0]=dương vô cực.
3. code tham khảo BCINCSEQ spoj PTIT
CONST FI=''; nmax=100000; type data=longint; var f:text; a:array[0..nmax+1] of data; n,i,j,max:data; C:array[0..nmax+1] of data; procedure docfile; var i,j:data; begin assign(f,fi); reset(f); readln(f,n); for i:=1 to n do read(f,a[i]); a[0]:=high(data); close(f); end; begin docfile; max:=0; for i:=1 to n do if a[i-1]<=a[i] then C[i]:=C[i-1]+1 else C[i]:=1; for i:=1 to n do if c[i]>max then max:=c[i]; writeln(max); end.