Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- #include <cstdio>
- #define FOR(i, k, n) for(int i = k ; i < n ; i++)
- void fast() {std::ios_base::sync_with_stdio(false) ; std::cin.tie(0) ; std::cout.tie(0);}
- typedef long long int lld ;
- lld gcd(lld a, lld b){ if(!a) return b ; return gcd(b%a, a) ;}
- template <class T> void print(T a) {std::cout << a << "\n" ;}
- const int MAX = 111111 ;
- // CODE FROM HERE
- int original_array[MAX] ;
- std::vector <int> ans ;
- int main(){
- // fast() ;
- freopen("input.txt", "r", stdin) ;
- // freopen("output.txt", "w", stdout) ;
- int t, n, k ;
- std::cin >> t ;
- lld count_ = 0 ;
- while(t--){
- std::cin >> n >> k ;
- FOR(i, 1, n + 1) std::cin >> original_array[i] ;
- ans.assign(n + 5, 0) ;
- int vis = n, inverse_divisor ;
- for(int cur_size = n ; cur_size >= 1 ; cur_size--){
- vis = cur_size ;
- int element = original_array[cur_size] ;
- inverse_divisor = 1e9 ;
- for(int divisor = 1 ; divisor <= cur_size ; divisor++){
- if(cur_size < divisor) break ;
- if(divisor >= inverse_divisor) break ;
- count_++ ;
- int diff ;
- if(divisor == 1){
- diff = 0 ;
- }
- else
- diff = element/(divisor - 1) - element/divisor ;
- ans[cur_size - divisor + 1] -= diff ;
- inverse_divisor = element/divisor + 1 ;
- if(divisor >= inverse_divisor) break ;
- if(cur_size - inverse_divisor + 1 >= 0)
- ans[cur_size - (inverse_divisor) + 1] -= 1 ;
- }
- }
- ans[n + 1] = 0 ;
- for(int i = n ; i >= 1 ; i--){
- ans[i] = ans[i] + original_array[i] + ans[i + 1] ;
- }
- int pos = n + 1 ;
- FOR(i, 1, n + 1){
- if(ans[i] <= k){
- pos = i ;
- break ;
- }
- }
- print(pos) ;
- }
- // std::cout << "coutn: " << 5*count_ << "\n" ;
- }
- //1 5 3
- //2 2 1
- //5 1 1
- // FOUND PATTERN THROUGH THIS std::cout << j << " " << b/j << " " << b/j - b/(j + 1) << "\n" ; :))
Add Comment
Please, Sign In to add comment