UVAOJ 497 - Strategic Defense Initiative

裸的LIS,根本不需要NlogN,虽然我还是用了

497 - Strategic Defense Initiative
#include <cstdio>
#include
<iostream>
#include
<vector>
#include
<string>
#include
<sstream>

using namespace std;

int f[65535];
vector
<int> row;
vector
<int> b;
int n;
int ans;

int bsearch(int &x,int size)
{
int l = 0;int r = size-1;
while(l<=r)
{
int m = (l+r)/2;
if (x > b[m]) l=m+1;
else r=m-1;
}
b[l]
= x;
return l;
}

void init()
{
row.clear();
b.clear();
string str;
stringstream temp;
temp.clear();
while(getline(cin,str))
{
temp
<<str;
int x;
temp
>>x;
row.push_back(x);
temp.clear();
}
f[
0] = 0; b.push_back(row[0]);
}

int dp()
{
for (int i=1;i<row.size();i++)
{
if (row[i] > b.back())
{
b.push_back(row[i]);
f[i]
=b.size();
}
else
{
f[i]
=bsearch(row[i],b.size())+1;
}
}
return b.size();
}

void output(int cas)
{
int flag = ans;
cout
<<"Max hits: "<<ans<<endl;
for (int i=row.size()-1;i>=0;i--)
{
if (f[i] == flag)
{cout
<<row[i]<<endl;
flag
--;
}
if (flag == -1)
break;
}
return;
}

int main()
{
freopen(
"ex.in","r",stdin);
cin
>>n;
for (int i=1;i<=n;i++)
{
init();
ans
= dp();
output(i);
}
return 0;
}

posted on 2011-08-05 21:25  cherryunix  阅读(175)  评论(0)    收藏  举报

导航