Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- using namespace std;
- int dx[10]={0,-1,-1,-1,0,0,1,1,1,0};
- int dy[10]={0,-1,0,1,-1,1,-1,0,1,0};
- int a[1505][1505],b[1505][1505],N, M, Q, i, j;
- int x, y, q[2300005][2], d[1505],s[1505],p,u,l,c,nr,max1;
- int main()
- {
- scanf("%d\n",&N);
- for (i=1;i<=N; i++)
- for (j=1; j<=N; j++)
- scanf("%d",&a[i][j]),b[i][j]=N+1;
- scanf("%d\n", &M);
- nr=0;
- for (i=1 ;i<= M; i++)
- {
- scanf("%d%d\n",&x,&y);
- if (a[x][y]==1) nr++;
- b[x][y]=0;
- q[i][0]=x;
- q[i][1]=y;
- }
- p=1;
- u=M;
- while (p<=u)
- {
- x=q[p][0];
- y=q[p][1];
- for (i=1;i<=8;i++)
- {
- l=x+dx[i];
- c=y+dy[i];
- if (l>=1&&l<=N&&c>=1&&c<=N&&b[l][c]>b[x][y]+1)
- b[l][c]=b[x][y]+1, u++, q[u][0]=l, q[u][1]=c;
- }
- p++;
- }
- max1=-1;
- for (i=1;i<=N;i++)
- {
- for (j=1;j<=N;j++)
- {
- if (a[i][j]==0)d[b[i][j]]++;
- if (a[i][j]==0&&b[i][j]>max1&&b[i][j]<=N) max1=b[i][j];
- }
- }
- d[0]=M-nr;
- s[0]=d[0];
- for (i=1;i<=max1;i++)
- s[i]=s[i-1]+d[i];
- scanf("%d\n",&Q);
- int tt,zz,yy,qq=0;
- for (i=1;i<=Q;i++)
- {
- scanf("%d",&x);
- p=0;
- u=max1;
- if (s[0]>=x) {printf("0 ");qq=qq+2;}
- else
- if (x>s[u])
- {printf("-1 ");qq==qq+3;}
- else
- {
- int rez=N*N+1;
- while (p<=u)
- {
- int mij=(p+u)/2;
- if (s[mij]>=x)
- {
- rez=mij;
- u=mij-1;
- }
- else
- if (s[mij]<x)
- p=mij+1;
- }
- printf("%d ",rez);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement