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];
- 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
Advertisement