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];
 - if(j!=i-1) data[j][1]=0;
 - j++;
 - }
 - tmp=j;
 - data[i-1][1]=sum;
 - i=tmp;
 - }
 - }
 - int ck=0,l=-1;
 - 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)
 - {
 - l++;
 - ans[l]=data[i-1][0];
 - ck=data[i-1][1];
 - }
 - }
 - int ask,low=0,hight=l,mid;
 - for(i=0; i<q; i++)
 - {
 - low=0;
 - hight=l-1;
 - mid=(l-1)/2;
 - scanf("%d",&ask);
 - if(ans[0]>ask)
 - {
 - printf("%d\n",ans[0]-1);
 - continue;
 - }
 - if(ans[l-1]<ask)
 - {
 - tmp=n-ans[l-1];
 - if(ans[l-1]==0) tmp++;
 - if(tmp==0) tmp=1;
 - printf("%d\n",tmp);
 - continue;
 - }
 - while(low<=hight)
 - {
 - if(ans[mid]<ask) low=mid+1;
 - else if(ans[mid]>ask && ans[mid-1]<ask)
 - {
 - pim:
 - printf("%d\n",ans[mid]-ans[mid-1]);
 - break;
 - }
 - else if(ans[mid]==ask)
 - {
 - mid++;
 - goto pim;
 - }
 - else hight=mid-1;
 - mid=(hight+low)/2;
 - }
 - }
 - return 0;
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment