LIS 문제 도움 부탁드립니다.

  • yujin.lee
    yujin.lee

    LIS 문제 푸는 중에 오답이 계속 발생하는데 좀 처럼 오답이 발생하는 입력 값을 찾을 수가 없어서 도움 부탁드립니다.ㅠ
    코드는 아래와 같습니다. 아래 알고리즘은 geeksforgeeks 사이트에서 참고했구요~.

    #include <stdio.h>
    
    int get_idx(int arr[], int value, int left, int right) {
      while (left <= right) {
        int center = left + (right-left)/2;
        if (arr[center] == value)
          return center;
        else if (arr[center] > value)
          right = center - 1;
        else
          left = center + 1;
      }
    }
    
    int get_lis(int arr[], int length) {
      int idx_buf[1000] = {0, };
      int i, last_pos;
    
      idx_buf[0] = arr[0];
      last_pos = 0;
    
      for (i=1;i<length;i++) {
        if (arr[i] < idx_buf[0]) {
          idx_buf[0] = arr[i];
        } else if (arr[i] > idx_buf[last_pos]) {
          last_pos++;
          idx_buf[last_pos] = arr[i];
        } else {
          int idx = get_idx(idx_buf, arr[i], 0, last_pos);
          idx_buf[idx] = arr[i];
        }
      }
    
      return last_pos + 1;
    }
    
    int main() {
      int sequence[1000] = {0, };
      int i, j;
      int num1, num2;
    
      scanf("%d", &num1);
      for (i=0;i<num1;i++) {
        scanf("%d", &num2);
        for (j=0;j<num2;j++) {
          scanf("%d", &(sequence[j]));
        }
        printf("%d\n", get_lis(sequence, num2));
      }
    
      return 0;
    }}
    

    8년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.