Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int data[200005][2]= {0}; // 0 up , 1 down look of black
- int ans[200005]= {0};
- int n,m,q;
- int cmp(const void *a,const void *b)
- {
- int *aa = (int*)a;
- int *bb = (int*)b;
- if(aa[0]>bb[0]) return 1;
- else return -1;
- }
- int main()
- {
- scanf("%d%d%d",&n,&m,&q); // n max number of magnet
- int i,j,tmp1,tmp2;
- for(i=0; i<m*2; i+=2)
- {
- scanf("%d%d",&tmp1,&tmp2);
- data[i][0]=tmp1;
- data[i+1][0]=tmp2+tmp1;
- data[i][1]=1;
- data[i+1][1]=-1;
- }
- qsort(data,m*2,sizeof(data[0]),cmp);
- int sum=0,tmp;
- for(i=1; i<m*2; i++)
- {
- if(data[i][0]==data[i-1][0])
- {
- j=i-1;
- sum=0;
- tmp=data[j][0];
- while(data[j][0]==tmp && j<m*2)
- {
- sum+=data[j][1];
- j++;
- }
- j=i-1;
- data[j][1]=sum;
- j++;
- while(data[j][0]==tmp && j<m*2)
- {
- data[j][1]=0;
- j++;
- }
- i=j;
- }
- }
- int ck=0,l=0;
- for(i=1; i<m*2; i++)
- {
- data[i][1]+=data[i-1][1];
- data[i-1][1]%=2;
- if(data[i-1][1]!=ck)
- {
- ans[l]=data[i-1][0];
- ck=data[i-1][1];
- l++;
- }
- }
- data[m*2-1][1]%=2;
- if(data[i][1]!=ck)
- {
- ans[l]=data[i][0];
- l++;
- }
- int ask;
- for(i=0; i<q; i++)
- {
- ck=2;
- scanf("%d",&ask);
- for(j=0; j<l; j++)
- {
- if(ans[j]>ask)
- {
- ck=1;
- if(j!=0) printf("%d\n",ans[j]-ans[j-1]);
- else printf("%d\n",ans[0]-1);
- break;
- }
- }
- if(ck==2)
- {
- if(l%2==0) printf("%d\n",n-ans[l-1]-1);
- else printf("%d\n",n-ans[l-1]);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement