Advertisement
nontawat1996

1029 magnet

Mar 3rd, 2013
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 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. j++;
  44. }
  45. j=i-1;
  46. data[j][1]=sum;
  47. j++;
  48. while(data[j][0]==tmp && j<m*2)
  49. {
  50. data[j][1]=0;
  51. j++;
  52. }
  53. i=j;
  54. }
  55. }
  56. int ck=0,l=0;
  57. for(i=1; i<m*2; i++)
  58. {
  59. data[i][1]+=data[i-1][1];
  60. data[i-1][1]%=2;
  61. if(data[i-1][1]!=ck)
  62. {
  63. ans[l]=data[i-1][0];
  64. ck=data[i-1][1];
  65. l++;
  66. }
  67. }
  68. data[m*2-1][1]%=2;
  69. if(data[i][1]!=ck)
  70. {
  71. ans[l]=data[i][0];
  72. l++;
  73. }
  74.  
  75. int ask;
  76. for(i=0; i<q; i++)
  77. {
  78. ck=2;
  79. scanf("%d",&ask);
  80. for(j=0; j<l; j++)
  81. {
  82. if(ans[j]>ask)
  83. {
  84. ck=1;
  85. if(j!=0) printf("%d\n",ans[j]-ans[j-1]);
  86. else printf("%d\n",ans[0]-1);
  87.  
  88. break;
  89. }
  90. }
  91. if(ck==2)
  92. {
  93. if(l%2==0) printf("%d\n",n-ans[l-1]-1);
  94. else printf("%d\n",n-ans[l-1]);
  95. }
  96. }
  97.  
  98. return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement