YEZAELP

SMMR-157: Dunning-Kruger Effect

May 26th, 2021 (edited)
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.54 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 1e3;
  5. int ar[N+10];
  6. int L[N+10], dpL[N+10];
  7. int R[N+10], dpR[N+10];
  8. int n;
  9.  
  10. int bs(int l, int r, int val, char lr){
  11.     int mn = r-l+1;
  12.     while(l <= r){
  13.         int mid = (l + r) / 2;
  14.         if(lr == 'l' and L[mid] <= val){
  15.             mn = min(mn, mid);
  16.             r = mid - 1;
  17.         }
  18.         else if(lr == 'r' and R[mid] <= val){
  19.             mn = min(mn, mid);
  20.             r = mid - 1;
  21.         }
  22.         else l = mid + 1;
  23.     }
  24.     return mn;
  25. }
  26.  
  27. int main(){
  28.  
  29.     scanf("%d", &n);
  30.  
  31.     for(int i=1;i<=n;i++) scanf("%d", &ar[i]);
  32.  
  33.     int l = 1;
  34.     L[1] = ar[1];
  35.     dpL[1] = 1;
  36.     for(int i=2;i<=n;i++){
  37.         if(L[l] > ar[i]){
  38.             l ++;
  39.             L[l] = ar[i];
  40.         }
  41.         else {
  42.             L[bs(1, l, ar[i], 'l')] = ar[i];
  43.         }
  44.         dpL[i] = l;
  45.     }
  46.  
  47.     int r = 1;
  48.     R[1] = ar[n];
  49.     dpR[n] = 1;
  50.     for(int i=n-1;i>=1;i--){
  51.         if(R[r] > ar[i]){
  52.             r ++;
  53.             R[r] = ar[i];
  54.         }
  55.         else {
  56.             R[bs(1, r, ar[i], 'r')] = ar[i];
  57.         }
  58.         dpR[i] = r;
  59.     }
  60.  
  61.     int mx = 1;
  62.     for(int i=1;i<=n;i++) mx = max(mx, dpL[i] + dpR[i] - 1);
  63.  
  64.     printf("%d", mx);
  65.  
  66.     return 0;
  67. }
  68. /**
  69.      for(int i=1;i<=n;i++) printf("%d ", dpL[i]);
  70.      printf("\n");
  71.      for(int i=1;i<=n;i++) printf("%d ", dpR[i]);
  72.      printf("\n");
  73.      for(int i=1;i<=l;i++) printf("%d ", L[i]);
  74.      printf("\n");
  75.      for(int i=1;i<=r;i++) printf("%d ", R[i]);
  76.      printf("\n");
  77. **/
  78.  
Add Comment
Please, Sign In to add comment