Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

LIS - Dãy con tăng dài nhất (bản khó)

(Giống bài LIQ) Cho một dãy gồm N số nguyên (1 ≤ N ≤ 30000). Hãy tìm dãy con tăng dài nhất trong dãy đó. In ra số lượng phần tử của dãy con. Các số trong phạm vi longint.

Input

  • Dòng đầu tiên gồm số nguyên N.
  • Dòng thứ hai gồm N số mô tả dãy.

Output

Gồm một số nguyên duy nhất là đáp số của bài toán

Example

Input:
5
2 1 4 3 5

Output:
3

Được gửi lên bởi:nha.duong
Ngày:2007-09-15
Thời gian chạy:0.120s
Giới hạn mã nguồn:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Ngôn ngữ cho phép:Tất cả ngoại trừ: ERL GOSU JS-RHINO NODEJS PERL6 PYPY RUST SED VB.NET
Nguồn bài:Bài cổ điển

hide comments
2018-06-21 03:28:03
Trau cung AC:
#include <bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
#define forinc(a,b,c) for(int a=b,_c=c;a<=_c;++a)
#define fordec(a,b,c) for(int a=b,_c=c;a>=_c;--a)
using namespace std;
int f[30001];
long long a[30001];
void read(long long & x)
{
x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while('0'<=c&&c<='9')
{
x=x*10+c-'0';
c=getchar();
}
}
int main()
{
int n;
cin>>n;
forinc(i,1,n) {read(a[i]);f[i]=1;}
forinc(i,2,n)
{
fordec(j,i-1,max(1,i-1000)) if(a[i]>a[j]) f[i]=max(f[i],f[j]+1);
}
int kq=1;
forinc(i,1,n) kq=max(kq,f[i]);
cout<<kq;
}

2018-04-21 18:48:00
Solution chi tiết: https://bit.ly/2F3aes1
2018-01-19 07:52:58
test case sai kia
2017-12-31 10:13:58
ledacthuongvq
2017-12-06 02:13:51
ac=kruscal :))
2017-11-16 04:44:24
=))))) h mới biết dùng BIT cx làm được :V
2017-11-15 02:37:04
nhật hào sạch
2017-10-07 19:37:58
BIT, IT, chặt nhị phân đều AC
2017-09-23 10:59:42
nhật hào sạch
2017-06-18 18:34:11
AC = segment tree =))
© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.