답안 #161033

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
161033 2019-10-31T09:33:14 Z stoyan_malinin Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++14
64 / 100
1603 ms 262148 KB
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

const int MAXN = 1e6 + 5;

int n;
int a[MAXN];

int findIndex(vector <int> &v, int x)
{
    if(v[0]>=x) return -1;

    int l = 0, r = v.size() - 1, mid;
    while(l+1<r)
    {
        mid = (l+r)/2;

        if(v[mid]<x) l = mid;
        else r = mid - 1;
    }

    if(v[r]<x) return v[r];
    return v[l];
}

struct node
{
    int maxCost;
    vector <int> v;

    int l, r;
    node *L, *R;

    node(){}
    node(int l, int r)
    {
        this->l = l;
        this->r = r;
        this->maxCost = 0;
        this->v = vector <int>{};

        this->L = nullptr;
        this->R = nullptr;
    }

    int calcCost(node *A, node *B)
    {
        int ans = max(A->maxCost, B->maxCost);

        int x = findIndex(B->v, A->v.back());
        if(x!=-1) ans = max(ans, x + A->v.back());

        return ans;
    }

    void build()
    {
        if(this->l==this->r)
        {
            this->v = vector <int>{a[this->l]};
            return;
        }

        this->L = new node(this->l, (this->l+this->r)/2);
        this->R = new node((this->l+this->r)/2+1, this->r);

        this->L->build();
        this->R->build();
        this->maxCost = this->calcCost(this->L, this->R);

        for(int x: this->L->v) this->v.push_back(x);
        for(int x: this->R->v) this->v.push_back(x);
        sort(this->v.begin(), this->v.end());
    }

    void query(int ql, int qr, vector <node*> &output)
    {
        if(this->l>=ql && this->r<=qr)
        {
            output.push_back(this);
            return;
        }
        if(this->r<ql || this->l>qr) return;

        this->L->query(ql, qr, output);
        this->R->query(ql, qr, output);
    }
};

node *T;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int Q;

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

    T = new node(0, n-1);
    T->build();

    vector <node*> v;
    while(Q--)
    {
        int l, r, x;
        cin >> l >> r >> x;
        l--;r--;

        int cost = 0;
        v.clear();T->query(l, r, v);

        int maxElement = -1;
        for(int i = 0;i<v.size();i++)
        {
            cost = max(cost, v[i]->maxCost);
            if(maxElement!=-1)
            {
                int curr = findIndex(v[i]->v, maxElement);
                if(curr!=-1) cost = max(cost, curr + maxElement);
            }

            maxElement = max(maxElement, v[i]->v.back());
        }

        if(cost<=x) cout << "1" << '\n';
        else cout << "0" << '\n';
    }
}
/*
5 2
3 5 1 8 2
1 3 6
2 5 3
*/

Compilation message

sortbooks.cpp: In function 'int main()':
sortbooks.cpp:122:24: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0;i<v.size();i++)
                       ~^~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 3 ms 504 KB Output is correct
7 Correct 3 ms 504 KB Output is correct
8 Correct 3 ms 504 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 3 ms 504 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 3 ms 504 KB Output is correct
7 Correct 3 ms 504 KB Output is correct
8 Correct 3 ms 504 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 3 ms 504 KB Output is correct
11 Correct 6 ms 760 KB Output is correct
12 Correct 10 ms 1660 KB Output is correct
13 Correct 11 ms 1660 KB Output is correct
14 Correct 14 ms 1832 KB Output is correct
15 Correct 25 ms 1828 KB Output is correct
16 Correct 11 ms 1784 KB Output is correct
17 Correct 8 ms 1400 KB Output is correct
18 Correct 9 ms 1656 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 1603 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 377 ms 27348 KB Output is correct
2 Correct 330 ms 27376 KB Output is correct
3 Correct 272 ms 27504 KB Output is correct
4 Correct 276 ms 27380 KB Output is correct
5 Correct 282 ms 27396 KB Output is correct
6 Correct 173 ms 27252 KB Output is correct
7 Correct 174 ms 27316 KB Output is correct
8 Correct 238 ms 27456 KB Output is correct
9 Correct 56 ms 1144 KB Output is correct
10 Correct 233 ms 27344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 3 ms 504 KB Output is correct
7 Correct 3 ms 504 KB Output is correct
8 Correct 3 ms 504 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 3 ms 504 KB Output is correct
11 Correct 6 ms 760 KB Output is correct
12 Correct 10 ms 1660 KB Output is correct
13 Correct 11 ms 1660 KB Output is correct
14 Correct 14 ms 1832 KB Output is correct
15 Correct 25 ms 1828 KB Output is correct
16 Correct 11 ms 1784 KB Output is correct
17 Correct 8 ms 1400 KB Output is correct
18 Correct 9 ms 1656 KB Output is correct
19 Correct 952 ms 54656 KB Output is correct
20 Correct 956 ms 54724 KB Output is correct
21 Correct 798 ms 54576 KB Output is correct
22 Correct 791 ms 54584 KB Output is correct
23 Correct 799 ms 54644 KB Output is correct
24 Correct 435 ms 54508 KB Output is correct
25 Correct 430 ms 54536 KB Output is correct
26 Correct 594 ms 54524 KB Output is correct
27 Correct 586 ms 54636 KB Output is correct
28 Correct 604 ms 54484 KB Output is correct
29 Correct 621 ms 54508 KB Output is correct
30 Correct 623 ms 54508 KB Output is correct
31 Correct 663 ms 54508 KB Output is correct
32 Correct 635 ms 54508 KB Output is correct
33 Correct 648 ms 54636 KB Output is correct
34 Correct 369 ms 54508 KB Output is correct
35 Correct 405 ms 54508 KB Output is correct
36 Correct 374 ms 54572 KB Output is correct
37 Correct 398 ms 54660 KB Output is correct
38 Correct 368 ms 54508 KB Output is correct
39 Correct 635 ms 54592 KB Output is correct
40 Correct 358 ms 34036 KB Output is correct
41 Correct 540 ms 54508 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 3 ms 504 KB Output is correct
7 Correct 3 ms 504 KB Output is correct
8 Correct 3 ms 504 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 3 ms 504 KB Output is correct
11 Correct 6 ms 760 KB Output is correct
12 Correct 10 ms 1660 KB Output is correct
13 Correct 11 ms 1660 KB Output is correct
14 Correct 14 ms 1832 KB Output is correct
15 Correct 25 ms 1828 KB Output is correct
16 Correct 11 ms 1784 KB Output is correct
17 Correct 8 ms 1400 KB Output is correct
18 Correct 9 ms 1656 KB Output is correct
19 Runtime error 1603 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
20 Halted 0 ms 0 KB -