Advertisement
nontawat1996

1029

Mar 3rd, 2013
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int data[200005][2]= {0}; // 0 up , 1 down look of black
  4. int ans[200005]= {0};
  5. int n,m,q;
  6.  
  7. int cmp(const void *a,const void *b)
  8. {
  9. int *aa = (int*)a;
  10. int *bb = (int*)b;
  11. if(aa[0]>bb[0]) return 1;
  12. else return -1;
  13. }
  14. int main()
  15. {
  16. scanf("%d%d%d",&n,&m,&q); // n max number of magnet
  17.  
  18. int i,j,tmp1,tmp2;
  19. for(i=0; i<m*2; i+=2)
  20. {
  21. scanf("%d%d",&tmp1,&tmp2);
  22. data[i][0]=tmp1;
  23. data[i+1][0]=tmp2+tmp1;
  24.  
  25. data[i][1]=1;
  26. data[i+1][1]=-1;
  27. }
  28.  
  29. qsort(data,m*2,sizeof(data[0]),cmp);
  30.  
  31.  
  32. int sum=0,tmp;
  33. for(i=1; i<m*2; i++)
  34. {
  35. if(data[i][0]==data[i-1][0])
  36. {
  37. j=i-1;
  38. sum=0;
  39. tmp=data[j][0];
  40. while(data[j][0]==tmp && j<m*2)
  41. {
  42. sum+=data[j][1];
  43. if(j!=i-1) data[j][1]=0;
  44. j++;
  45. }
  46. tmp=j;
  47. data[i-1][1]=sum;
  48. i=tmp;
  49. }
  50. }
  51. int ck=0,l=-1;
  52. for(i=1; i<=m*2; i++)
  53. {
  54. data[i][1]+=data[i-1][1];
  55. data[i-1][1]%=2;
  56. if(data[i-1][1]!=ck)
  57. {
  58. l++;
  59. ans[l]=data[i-1][0];
  60. ck=data[i-1][1];
  61. }
  62. }
  63. int ask,low=0,hight=l,mid;
  64. for(i=0; i<q; i++)
  65. {
  66. low=0;
  67. hight=l-1;
  68. mid=(l-1)/2;
  69.  
  70. scanf("%d",&ask);
  71. if(ans[0]>ask)
  72. {
  73. printf("%d\n",ans[0]-1);
  74. continue;
  75. }
  76. if(ans[l-1]<ask)
  77. {
  78. tmp=n-ans[l-1];
  79. if(ans[l-1]==0) tmp++;
  80. if(tmp==0) tmp=1;
  81. printf("%d\n",tmp);
  82. continue;
  83. }
  84. while(low<=hight)
  85. {
  86. if(ans[mid]<ask) low=mid+1;
  87. else if(ans[mid]>ask && ans[mid-1]<ask)
  88. {
  89. pim:
  90. printf("%d\n",ans[mid]-ans[mid-1]);
  91. break;
  92. }
  93. else if(ans[mid]==ask)
  94. {
  95. mid++;
  96. goto pim;
  97. }
  98. else hight=mid-1;
  99. mid=(hight+low)/2;
  100. }
  101. }
  102.  
  103. return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement