제출 #1139634

#제출 시각아이디문제언어결과실행 시간메모리
1139634mariemcharefRabbit Carrot (LMIO19_triusis)C++17
100 / 100
17 ms6588 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll _Gcd(int a, int b) { return b == 0 ? a : _Gcd(b, a % b); }
ll lcm(ll a, ll b) { return (a * b) / _Gcd(a, b); }

bool prime(int n)
{
    if (n < 2)
        return false;
    for (int x = 2; x * x <= n; x++)
        if (n % x == 0)
            return false;
    return true;
}

ll mod = 998244353;

ll power(ll a, ll b, ll mod = 1e9 + 7)
{
    ll result = 1;
    while (b > 0)
    {
        if (b & 1)
        {
            result = (result * a) % mod;
        }
        a = (a * a) % mod;
        b >>= 1;
    }
    return result;
}

int lowbit(int x)
{
    return x & (-x);
}

int xorFrom1To(int n)
{
    if (n % 4 == 0)
        return n;
    else if (n % 4 == 1)
        return 1;
    else if (n % 4 == 2)
        return n + 1;
    else
        return 0;
}

int factorial(int n)
{
    if (n <= 1)
        return 1;
    return n * factorial(n - 1);
}

/*const int MAX_N = 1e6;
// max_div[i] contains the largest prime that goes into i
int max_div[MAX_N + 1];

void seive() {
    for (int i = 2; i <= MAX_N; i++) {
        if (max_div[i] == 0) {
            for (int j = i; j <= MAX_N; j += i) { max_div[j] = i; }
        }
    }
}*/
vector<int> factor(int n)
{ // O (racine de n)
    vector<int> ret;
    for (int i = 2; i * i <= n; i++)
    {
        while (n % i == 0)
        {
            ret.push_back(i);
            n /= i;
        }
    }
    if (n > 1)
    {
        ret.push_back(n);
    }
    return ret;
}
int phi(int n)
{ // counts the number of positive integers in the interval [1,n] which are coprime to n
    int ans = n;
    for (int p = 2; p * p <= n; p++)
    {
        if (n % p == 0)
        {
            while (n % p == 0)
            {
                n /= p;
            }
            ans -= ans / p;
        }
    }
    if (n > 1)
    {
        ans -= ans / n;
    }
    return ans;
}

void solve()
{
    ll n, t, s, m,d, q;
    cin >> n >> m;
    vector<ll> v(n),u, dp;
    for (int i = 0; i <n; i++){
        cin>>v[i];
    }
    for (int i = 1; i <=n; i++)
    {
        
        if(m*i>=v[i-1]) u.push_back(m*i-v[i-1]);
    }
    for (int i : u)
    {

        int pos = upper_bound(dp.begin(), dp.end(), i) - dp.begin();//upper instead of lower bc not strictly increesing
        if (pos == dp.size())
        {
            dp.push_back(i);
        }
        else 
        {
            dp[pos] = i;
        }
    }
    cout << n-dp.size() << endl;
}

int main()
{

    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int q = 1;
    // cin >> q;
    while (q--)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...