Submission #825966

#TimeUsernameProblemLanguageResultExecution timeMemory
825966borisAngelovHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++17
17 / 100
3074 ms53976 KiB
#include <bits/stdc++.h>

using namespace std;

const int maxn = 1000005;

int n, q;

int a[maxn];

struct query
{
    int l;
    int k;
    int idx;

    query()
    {

    }

    query(int _l, int _k, int _idx)
    {
        l = _l;
        k = _k;
        idx = _idx;
    }
};

vector<query> queries[maxn];
int answers[maxn];

int max_inv_sum[maxn];

void fastIO()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

int main()
{
    fastIO();

    cin >> n >> q;

    for (int i = 1; i <= n; ++i)
    {
        cin >> a[i];
    }

    for (int i = 1; i <= q; ++i)
    {
        int l, r, k;
        cin >> l >> r >> k;
        queries[r].push_back(query(l, k, i));
    }

    stack<int> st;

    for (int i = 1; i <= n; ++i)
    {
        while (!st.empty() && a[st.top()] <= a[i])
        {
            st.pop();
        }

        if (!st.empty())
        {
            for (int j = 1; j <= st.top(); ++j)
            {
                max_inv_sum[j] = max(max_inv_sum[j], a[i] + a[st.top()]);
            }
        }

        for (int j = 0; j < queries[i].size(); ++j)
        {
            int l = queries[i][j].l;
            int max_sum = 0;

            for (int k = l; k <= i; ++k)
            {
                max_sum = max(max_sum, max_inv_sum[k]);

                if (max_sum > queries[i][j].k)
                {
                    break;
                }
            }

            //cout << "test " << l << ' ' << i << ' ' << max_sum << ' ' << endl;

            if (max_sum <= queries[i][j].k)
            {
                answers[queries[i][j].idx] = 1;
            }
            else
            {
                answers[queries[i][j].idx] = 0;
            }
        }

        st.push(i);
    }

    for (int i = 1; i <= q; ++i)
    {
        cout << answers[i] << "\n";
    }

    return 0;
}

Compilation message (stderr)

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:77:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<query>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   77 |         for (int j = 0; j < queries[i].size(); ++j)
      |                         ~~^~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...