Submission #377234

#TimeUsernameProblemLanguageResultExecution timeMemory
377234ntabc05101Hedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++14
34 / 100
821 ms128748 KiB
#ifndef LOCAL
#define NDEBUG 1
#endif // LOCAL
#include<bits/stdc++.h>

#define taskname ""

#define f first
#define s second

const int max_n=100000;

int nodes[max_n<<2];
int L[max_n<<2], H[max_n<<2];

void buildRange(int node, int low, int high) {
        L[node]=low, H[node]=high;
        if (low==high) {
                return ;
        }

        int mid=low+high>>1;
        buildRange(node<<1, low, mid);
        buildRange(node<<1|1, mid+1, high);
}

void update(int node, int posq, int value) {
        if (L[node]==H[node]) {
                nodes[node]=std::max(nodes[node], value);
                return ;
        }

        if (posq>H[node<<1]) {
                update(node<<1|1, posq, value);
        }
        else {
                update(node<<1, posq, value);
        }

        nodes[node]=std::max(nodes[node<<1], nodes[node<<1|1]);
}

int get(int node, int leftq, int rightq) {
        if (leftq>H[node] or rightq<L[node]) {
                return 0;
        }

        if (leftq<=L[node] and rightq>=H[node]) {
                return nodes[node];
        }

        return std::max(get(node<<1, leftq, rightq), get(node<<1|1, leftq, rightq));
}

int main() {
        if (fopen(taskname".inp", "r")) {
                freopen(taskname".inp", "r", stdin);
                freopen(taskname".out", "w", stdout);
        }
        else if (fopen(taskname".in", "r")) {
                freopen(taskname".in", "r", stdin);
                freopen(taskname".out", "w", stdout);
        }

        std::ios_base::sync_with_stdio(0); std::cin.tie(0);

        int n, m; std::cin>>n>>m;
        int w[n];
        for (int i=0; i<n; ++i) {
                std::cin>>w[i];
        }

        std::vector< std::pair< std::pair<int, int>, int > > q[n];
        for (int i=0; i<m; ++i) {
                int left, right, k; std::cin>>left>>right>>k;

                --left, --right;
                q[right].push_back({{left, k}, i});
        }

        bool result[m];
        buildRange(1, 0, n-1);
        std::deque<int> deq;
        for (int i=0; i<n; ++i) {
                while (!deq.empty() and w[deq.back()]<=w[i]) {
                        deq.pop_back();
                }

                if (!deq.empty()) {
                        update(1, deq.back(), w[deq.back()]+w[i]);
                }
                deq.push_back(i);

                for (auto& Q: q[i]) {
                        result[Q.s]=(get(1, Q.f.f, i)<=Q.f.s);
                }
        }

        for (int i=0; i<m; ++i) {
                std::cout<<result[i]<<"\n";
        }

        return 0;
}

Compilation message (stderr)

sortbooks.cpp: In function 'void buildRange(int, int, int)':
sortbooks.cpp:22:20: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   22 |         int mid=low+high>>1;
      |                 ~~~^~~~~
sortbooks.cpp: In function 'int main()':
sortbooks.cpp:57:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   57 |                 freopen(taskname".inp", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:58:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   58 |                 freopen(taskname".out", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:61:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   61 |                 freopen(taskname".in", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:62:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
   62 |                 freopen(taskname".out", "w", stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...