记录编号 204107 评测结果 AAAAAAAAAA
题目名称 [SYOI 2015] Asm.Def的一秒 最终得分 100
用户昵称 Gravatarmikumikumi 是否通过 通过
代码语言 C++ 运行时间 0.276 s
提交时间 2015-11-03 21:35:33 内存使用 5.65 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<deque>
  5. using namespace std;
  6. const int SIZEN=100010,INF=0x7fffffff/2;
  7. typedef long long LL;
  8. int N;
  9. LL a,b,c,d;
  10. int f[2*SIZEN]={0};
  11. class poi
  12. {
  13. public:
  14. LL x,y;
  15. int id;
  16. }P[2*SIZEN];
  17. bool cmp(poi a,poi b)
  18. {
  19. if(a.x==b.x) return a.y<b.y;
  20. return a.x<b.x;
  21. }
  22. int tr[SIZEN*2]={0};
  23. void read()
  24. {
  25. scanf("%d",&N);
  26. scanf("%d%d%d%d",&a,&b,&c,&d);
  27. for(int i=1;i<=N;i++)
  28. {
  29. scanf("%d%d",&P[i].x,&P[i].y);
  30. P[i].id=i;
  31. }
  32. P[0].x=0,P[0].y=0;P[0].id=0;
  33. }
  34. void set()
  35. {
  36. //cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
  37. for(int i=1;i<=N;i++)
  38. {
  39. int x=P[i].x,y=P[i].y;
  40. P[i].x=c*x-d*y;
  41. P[i].y=b*y-a*x;
  42. P[i].x*=(-1);P[i].y*=(-1);
  43. }
  44. }
  45. int lowbit(int x)
  46. {
  47. return x&(-x);
  48. }
  49. void add(int x,int y)
  50. {
  51. //cout<<x<<" "<<y<<endl;
  52. for(int i=x;i<=N+1;i+=lowbit(i)) tr[i]=max(tr[i],y);
  53. }
  54. int get(int x)
  55. {
  56. int ans=0;
  57. for(int i=x;i>0;i-=lowbit(i)) ans=max(ans,tr[i]);
  58. return ans;
  59. }
  60. void DP()
  61. {
  62. for(int i=0,j=0;i<=N;i++)
  63. {
  64. while(P[j].x<P[i].x)
  65. {
  66. //cout<<i<<" "<<j<<endl;
  67. add(P[j].y,f[P[j].id]);
  68. j++;
  69. }
  70. f[P[i].id]=get(P[i].y-1)+1;
  71. }
  72. }
  73. bool cmp2(poi a,poi b)
  74. {
  75. if(a.y==b.y) return a.x<b.x;
  76. return a.y<b.y;
  77. }
  78. void lisan()
  79. {
  80. sort(P,P+N+1,cmp2);
  81. int cnt=1;
  82. int Y[SIZEN]={0};
  83. Y[0]=cnt;
  84. for(int i=1;i<=N;i++)
  85. {
  86. if(P[i].y!=P[i-1].y) cnt++;
  87. Y[i]=cnt;
  88. }
  89. for(int i=0;i<=N;i++) P[i].y=Y[i];
  90. }
  91. void work()
  92. {
  93. set();
  94. //for(int i=0;i<=N;i++) cout<<P[i].x<<" "<<P[i].y<<" "<<P[i].id<<endl;
  95. lisan();
  96. sort(P,P+N+1,cmp);
  97. //for(int i=0;i<=N;i++) cout<<P[i].x<<" "<<P[i].y<<" "<<P[i].id<<endl;
  98. DP();
  99. printf("%d",f[0]-1);
  100. }
  101. int main()
  102. {
  103. freopen("asm_second.in","r",stdin);
  104. freopen("asm_second.out","w",stdout);
  105. read();
  106. work();
  107. return 0;
  108. }