MAGCARI

mangoes

May 24th, 2023
766
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. /*
  2.     Author  : Phumipat C. [MAGCARI]
  3.     Language: C++
  4.     Created : 15 May 2023 [19:55]
  5. */
  6. #include<bits/stdc++.h>
  7. using namespace std;
  8. struct A{
  9.     int i,j,w;
  10. };
  11. A trees[100010];
  12. int qs[5010][5010];
  13. int main(){
  14.     int n,m,R,C;
  15.     cin >> n >> m >> R >> C;
  16.     for(int i=1;i<=n;i++)
  17.         cin >> trees[i].i >> trees[i].j >> trees[i].w;
  18.     for(int i=1;i<=m;i++){
  19.         int u,v;
  20.         cin >> u >> v;
  21.         qs[u][v]++;
  22.     }
  23.     for(int i=1;i<=R;i++)
  24.         for(int j=1;j<=C;j++)
  25.             qs[i][j] += qs[i-1][j] + qs[i][j-1] - qs[i-1][j-1];
  26.     int l = 1,r = max(R,C);
  27.     while(l<r){
  28.         int mid = (l+r)/2;
  29.         int able = true;
  30.         for(int k=1;k<=n;k++){
  31.             int i = trees[k].i,j = trees[k].j;
  32.             int num = qs[min(R,i+mid)][min(C,j+mid)] - qs[max(0,i-mid-1)][min(C,j+mid)] - qs[min(R,i+mid)][max(0,j-mid-1)] + qs[max(0,i-mid-1)][max(0,j-mid-1)];
  33.             if(num < trees[k].w){
  34.                 able = 0;
  35.                 break;
  36.             }
  37.         }
  38.         if(able)    r = mid;
  39.         else        l = mid+1;
  40.     }
  41.     cout << l << '\n';
  42.     return 0;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment