Maximum White Tiles Covered by a Carpet (biweekly contest 78)

int maximumWhiteTiles(vector<vector>& tiles, int carpetlen) {

ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(0);

    int n=tiles.size();
    sort(tiles.begin(),tiles.end());
    vector<int> cn(n);
      vector<int> f(n);
    cn[0]=tiles[0][1]-tiles[0][0]+1;
    f[0]=tiles[0][0];
    for(int i=1;i<n;i++)
    {
        f[i]=tiles[i][0];
        cn[i]=cn[i-1]+tiles[i][1]-tiles[i][0]+1;
    }
    int c=0;
   for(int i=0;i<n;i++)
   {    int x=tiles[i][0];
          x+=carpetlen-1;
    int z=0;
         int v=upper_bound(f.begin(),f.end(),x)-f.begin();
         v--;
    int q=cn[v];
    if(tiles[v][1]>x)
        q-=(tiles[v][1]-x);
         z=q;
    if(i>0)
        z-=cn[i-1];
        c=max(c,z);
   }return c;
    
}
Comments (0)