Advertisement
mickypinata

PROG-T1052: Domino

Sep 13th, 2021
744
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 1e6;
  5.  
  6. int coor[N + 2], height[N + 2], dp[N + 2], pr[N + 1];
  7.  
  8. int main(){
  9.  
  10.     int n;
  11.     scanf("%d", &n);
  12.     for(int i = 1; i <= n; ++i){
  13.         scanf("%d%d", &coor[i], &height[i]);
  14.     }
  15.     int mx = 0;
  16.     int idx = 0;
  17.     char dir = 'L';
  18.     // Left side
  19.     dp[n + 1] = 1e9 + 1;
  20.     for(int i = n; i >= 1; --i){
  21.         if(dp[i + 1] < coor[i]){
  22.             dp[i] = min(dp[i + 1], coor[i] - height[i]);
  23.             pr[i] = pr[i + 1];
  24.         } else {
  25.             dp[i] = coor[i] - height[i];
  26.             pr[i] = i;
  27.         }
  28.         int cnt = pr[i] - i + 1;
  29.         if(cnt > mx){
  30.             mx = cnt;
  31.             idx = pr[i];
  32.             dir = 'L';
  33.         } else if(cnt == mx && pr[i] < idx){
  34.             idx = pr[i];
  35.             dir = 'L';
  36.         }
  37.     }
  38.     // Right Side
  39.     dp[0] = -1;
  40.     for(int i = 1; i <= n; ++i){
  41.         if(dp[i - 1] > coor[i]){
  42.             dp[i] = max(dp[i - 1], coor[i] + height[i]);
  43.             pr[i] = pr[i - 1];
  44.         } else {
  45.             dp[i] = coor[i] + height[i];
  46.             pr[i] = i;
  47.         }
  48.         int cnt = i - pr[i] + 1;
  49.         if(cnt > mx){
  50.             mx = cnt;
  51.             idx = pr[i];
  52.             dir = 'R';
  53.         } else if(cnt == mx && pr[i] < idx){
  54.             idx = pr[i];
  55.             dir = 'R';
  56.         }
  57.     }
  58.     cout << idx << ' ' << dir;
  59.  
  60.     return 0;
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement