记录编号 161007 评测结果 AAAAAAAAAAA
题目名称 [USACO Feb08] 麻烦的聚餐 最终得分 100
用户昵称 Gravatarforever 是否通过 通过
代码语言 C++ 运行时间 0.023 s
提交时间 2015-04-30 14:52:32 内存使用 1.00 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. int a[30001],f[30001],c[30001],fa[30001],b[30001],d[30001];
  7. int main()
  8. { freopen("egroup.in","r",stdin);
  9. freopen("egroup.out","w",stdout);
  10. int p,n;
  11. scanf("%d",&n);
  12. for(int i=1;i<=n;++i)
  13. { scanf("%d",&p);
  14. a[i]=p;
  15. c[n+1-i]=p;
  16. f[i]=1;
  17. fa[i]=1;
  18. }
  19. memset(b,24,sizeof(b));
  20. b[0]=0;
  21. int tot=0,tott=0;
  22. for(int i=1;i<=n;++i)
  23. { int t=i,s=0;
  24. while(1)
  25. { if(s>t) break;
  26. int temp=(t+s)>>1;
  27. if(b[temp]<=a[i]) s=temp+1;
  28. else
  29. t=temp-1;
  30. }
  31. f[i]=s;
  32. if(b[s]>=a[i]) b[s]=a[i];
  33. if(f[i]>tot) tot=f[i];
  34. }
  35. tot=n-tot;
  36. //cout<<tot<<endl;
  37. memset(d,24,sizeof(d));
  38. d[0]=0;
  39. for(int i=1;i<=n;++i)
  40. {
  41. int t=i,s=0;
  42. while(1)
  43. { if(s>t) break;
  44. int temp=(t+s)>>1;
  45. if(d[temp]<=c[i]) s=temp+1;
  46. else
  47. t=temp-1;
  48. }
  49. fa[i]=s;
  50. if(d[s]>=c[i])d[s]=c[i];
  51. if(fa[i]>tott) tott=fa[i];
  52. }
  53. tott=n-tott;
  54. printf("%d",min(tot,tott));
  55. //system("pause");
  56. }