| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
为什么我的程序在g++ ac 在 c++ wa程序如下
#include<iostream>
#include<cstdlib>
using namespace std;
const int N=1000;
double a[N];
int d1[N],d2[N];
inline int find(double key,double *c,int left,int right){//<key zui da zhi
if(c[left]>=key)return -1;
else if(left==right)return left;
if(c[right]<key)return right;
else return
find(key,c,left,(right+left)/2)>find(key,c,(right+left)/2+1,right)?find(key,c,left,(right+left)/2):find(key,c,(right+left)/2+1,right);
}
void lcs1(double *a,int n){//nlogn
int len=0;
double d[N];
//memset(d,0,sizeof(d));
//memset(d1,0,sizeof(d1));
d[0]=a[0];//len==chang-1==0
d1[0]=1;//0--n bao n zui chang zi xu lie
for(int i=1;i<n;i++){
if(a[i]>d[len]){//ying wu ==
len++;
d[len]=a[i];
}
else {
int k=find(a[i],d,0,len);
if(k!=-1)
d[k+1]=a[i];
}
d1[i]=len+1;//xian shi zuida chang
if(d[0]>a[i])d[0]=a[i];//NOTE!
}
}
void lcs2(double *a,int n){//nlogn
int len=0;
double r2[N];
//memset(d2,0,sizeof(d2));
//memset(r2,0,sizeof(r2));
r2[0]=a[n-1];
d2[n-1]=1;//k--n-1 han duan dian zui chang zi xu lie
for(int i=n-2;i>=0;i--){
if(a[i]>r2[len]){
len++;
r2[len]=a[i];
}
else {
int k=find(a[i],r2,0,len);
if(k!=-1)
r2[k+1]=a[i];
}
d2[i]=len+1;
if(r2[0]>a[i])r2[0]=a[i];//NOTE!
}
}
int lcs(double *a,int n){
lcs1(a,n);
lcs2(a,n);
int max=0;
if(d1[n-1]>max)max=d1[n-1];
if(d2[0]>max)max=d2[0];
for(int i=0;i<n;i++)
if(d1[i]+d2[i+1]>max)
max=d1[i]+d2[i+1];
return n-max;
}
void Cin(){
int t;
cin>>t;
for(int i=0;i<t;i++)
cin>>a[i];
cout<<lcs(a,t)<<endl;
}
int main(){
//freopen("a.in","r",stdin);
Cin();
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator