fork download
  1. #include <stdio.h>
  2.  
  3. inline long long int fast_input(void)
  4. {
  5. char t;
  6. long long int x=0;
  7. long long int neg=0;
  8. t=getchar();
  9. while((t<48 || t>57) && t!='-')
  10. t=getchar();
  11. if(t=='-')
  12. neg=1;
  13. else
  14. {
  15. while(t>=48 && t<=57)
  16. {
  17. x=(x<<3)+(x<<1)+t-48;
  18. t=getchar();
  19. }
  20. }
  21. if(neg)
  22. x=-x;
  23. return x;
  24. }
  25.  
  26. inline void fast_output(long long int x)
  27. {
  28. char a[12];
  29. long long int i=0,j;
  30. a[0]='0';
  31. if (x==0) putchar('0');
  32. while(x)
  33. {
  34. a[i++]=x%10+48;
  35. x/=10;
  36. }
  37. for(j=i-1;j>=0;j--)
  38. {
  39. putchar(a[j]);
  40. }
  41. putchar('\n');
  42. }
  43.  
  44. long long int BinarySearch(long long int a[101][5001],long long int i, long long int m,long long int temp)
  45. {
  46. int left=0,right=m-1,mid;
  47. mid=(left+right)/2;
  48. while(!(a[i][mid]<=temp&&a[i][mid+1]>temp)&&left<right)
  49. {
  50. mid=(left+right)/2;
  51. if (a[i][mid]>temp) left=mid+1;
  52. else if (a[i][mid]<temp) right=mid-1;
  53. if (a[i][mid]==temp&&a[i][mid+1]==temp)
  54. {
  55. left++,right++,
  56. mid++;
  57. }
  58. }
  59. while(left==right&&a[i][mid+1]==a[i][mid]) mid++;
  60. return mid;
  61. }
  62.  
  63. int main()
  64. {
  65. long long int a[101][5001],n,m,q,i,j,temp,mid,minlevel;
  66. n=fast_input();
  67. m=fast_input();
  68. q=fast_input();
  69. for(i=0;i<n;i++)
  70. for(j=0;j<m;j++)
  71. a[i][j]=fast_input();
  72. for(i=0;i<q;i++)
  73. {
  74. minlevel=101;
  75. for(j=0;j<n;j++)
  76. {
  77. temp=fast_input();
  78. mid=BinarySearch(a,j,m,temp);
  79. if (mid<minlevel) minlevel=mid;
  80. }
  81. fast_output(minlevel);
  82. }
  83. return 0;
  84. }
  85.  
Success #stdin #stdout 0s 7168KB
stdin
2 3 3
10 20 30
7 14 100
11 7
35 13
100 1002
stdout
1
1
1