thesmartguy97

Untitled

Mar 14th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.22 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <cstdio>
  5. #define FOR(i, k, n) for(int i = k ; i < n ; i++)
  6. void fast() {std::ios_base::sync_with_stdio(false) ; std::cin.tie(0) ; std::cout.tie(0);}
  7. typedef long long int lld  ;
  8. lld gcd(lld a, lld b){ if(!a) return b ; return gcd(b%a, a) ;}
  9. template <class T> void print(T a) {std::cout << a << "\n" ;}
  10. const int MAX = 111111 ;
  11.  
  12. // CODE FROM HERE
  13. int original_array[MAX] ;
  14. std::vector <int> ans ;
  15. int main(){
  16. //    fast() ;
  17.     freopen("input.txt", "r", stdin) ;
  18. //    freopen("output.txt", "w", stdout) ;
  19.  
  20.     int t, n, k ;
  21.     std::cin >> t ;
  22.  
  23.     lld count_ = 0 ;
  24.     while(t--){
  25.         std::cin >> n >> k ;
  26.         FOR(i, 1, n + 1) std::cin >> original_array[i] ;
  27.  
  28.         ans.assign(n + 5, 0) ;
  29.  
  30.         int vis = n, inverse_divisor ;
  31.         for(int cur_size = n ; cur_size >= 1 ; cur_size--){
  32.             vis = cur_size ;
  33.             int element = original_array[cur_size] ;
  34.             inverse_divisor = 1e9 ;
  35.  
  36.             for(int divisor = 1 ; divisor <= cur_size ; divisor++){
  37.                 if(cur_size < divisor) break ;
  38.                 if(divisor >= inverse_divisor) break ;
  39.  
  40.                 count_++ ;
  41.                 int diff ;
  42.                 if(divisor == 1){
  43.                     diff = 0 ;
  44.                 }
  45.                 else
  46.                     diff = element/(divisor - 1) - element/divisor ;
  47.  
  48.                 ans[cur_size - divisor + 1] -= diff ;
  49.  
  50.                 inverse_divisor = element/divisor + 1 ;
  51.                 if(divisor >= inverse_divisor) break ;
  52.  
  53.                 if(cur_size - inverse_divisor + 1 >= 0)
  54.                     ans[cur_size - (inverse_divisor) + 1] -= 1 ;
  55.             }
  56.         }
  57.  
  58.         ans[n + 1] = 0 ;
  59.         for(int i = n ; i >= 1 ; i--){
  60.             ans[i] = ans[i] + original_array[i] + ans[i + 1] ;
  61.         }
  62.  
  63.         int pos = n + 1 ;
  64.         FOR(i, 1, n + 1){
  65.             if(ans[i] <= k){
  66.                 pos = i ;
  67.                 break ;
  68.             }
  69.         }
  70.         print(pos) ;
  71.     }
  72. //    std::cout << "coutn: " << 5*count_ << "\n" ;
  73. }
  74. //1 5 3
  75. //2 2 1
  76. //5 1 1
  77. // FOUND PATTERN THROUGH THIS std::cout << j << " " << b/j << " " << b/j - b/(j + 1) << "\n" ; :))
Add Comment
Please, Sign In to add comment