답안 #709779

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
709779 2023-03-14T12:09:41 Z groshi Hedgehog Daniyar and Algorithms (IZhO19_sortbooks) C++17
64 / 100
3000 ms 206788 KB
#include<iostream>
#include<vector>
using namespace std;
const int T = 1<<20;
vector<int> drzewo[2*T];
int wynik[2*T];
int maxx=0;
int wynikk=0;
int pot=1;
void dodaj(int x)
{
    wynikk=max(wynikk,wynik[x]);
    if(drzewo[x].size()==0)
        return;
    int mam=drzewo[x].back();
    if(maxx==0)
    {
        maxx=mam;
        return;
    }
    int gdzie=lower_bound(drzewo[x].begin(),drzewo[x].end(),maxx)-drzewo[x].begin();
    if(gdzie>=1 && gdzie<=drzewo[x].size())
        wynikk=max(wynikk,maxx+drzewo[x][gdzie-1]);
    maxx=max(maxx,mam);
}
void zapp(int x,int l,int r,int a,int b)
{
    if(l>b || r<a)
        return;
    if(a<=l && r<=b)
    {
        dodaj(x);
        return;
    }
    int mid=(l+r)/2;
    zapp(x*2,l,mid,a,b);
    zapp(x*2+1,mid+1,r,a,b);
}
int32_t main()
{
    cin.tie(0);
    cout.tie(0);
    ios_base::sync_with_stdio(0);
    int n,zap,x;
    cin>>n>>zap;
    while(pot<=n)
        pot*=2;
    pot--;
    for(int i=1;i<=n;i++)
    {
        cin>>x;
        drzewo[i+pot].push_back(x);
    }
    for(int i=pot;i>=1;i--)
    {
        ///merguje i*2 z i*2+1
        wynik[i]=max(wynik[i*2],wynik[i*2+1]);
        if(drzewo[i*2].size()>0)
        {
            int jest=drzewo[i*2].back();
            int gdzie=lower_bound(drzewo[i*2+1].begin(),drzewo[i*2+1].end(),jest)-drzewo[i*2+1].begin();
            if(gdzie>=1 && gdzie<=drzewo[i*2+1].size())
                wynik[i]=max(wynik[i],jest+drzewo[i*2+1][gdzie-1]);
        }
        int l=0,r=0;
        while(l<drzewo[i*2].size() || r<drzewo[i*2+1].size())
        {
            if(l==drzewo[i*2].size())
            {
                drzewo[i].push_back(drzewo[i*2+1][r]);
                r++;
                continue;
            }
            if(r==drzewo[i*2+1].size())
            {
                drzewo[i].push_back(drzewo[i*2][l]);
                l++;
                continue;
            }
            if(drzewo[i*2][l]<=drzewo[i*2+1][r])
            {
                drzewo[i].push_back(drzewo[i*2][l]);
                l++;
            }
            else{
                drzewo[i].push_back(drzewo[i*2+1][r]);
                r++;
            }
        }
    }
    while(zap--)
    {
        int x,y,z;
        cin>>x>>y>>z;
        maxx=0;
        wynikk=0;
        zapp(1,pot+1,pot*2+1,x+pot,y+pot);
        //cout<<wynikk<<"\n";
        if(wynikk>z)
            cout<<"0\n";
        else cout<<"1\n";
    }
    return 0;
}

Compilation message

sortbooks.cpp: In function 'void dodaj(int)':
sortbooks.cpp:22:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     if(gdzie>=1 && gdzie<=drzewo[x].size())
      |                    ~~~~~^~~~~~~~~~~~~~~~~~
sortbooks.cpp: In function 'int32_t main()':
sortbooks.cpp:62:33: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |             if(gdzie>=1 && gdzie<=drzewo[i*2+1].size())
      |                            ~~~~~^~~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:66:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         while(l<drzewo[i*2].size() || r<drzewo[i*2+1].size())
      |               ~^~~~~~~~~~~~~~~~~~~
sortbooks.cpp:66:40: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |         while(l<drzewo[i*2].size() || r<drzewo[i*2+1].size())
      |                                       ~^~~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:68:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |             if(l==drzewo[i*2].size())
      |                ~^~~~~~~~~~~~~~~~~~~~
sortbooks.cpp:74:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   74 |             if(r==drzewo[i*2+1].size())
      |                ~^~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 49552 KB Output is correct
2 Correct 25 ms 49488 KB Output is correct
3 Correct 26 ms 49628 KB Output is correct
4 Correct 29 ms 49508 KB Output is correct
5 Correct 29 ms 49468 KB Output is correct
6 Correct 25 ms 49608 KB Output is correct
7 Correct 24 ms 49620 KB Output is correct
8 Correct 23 ms 49620 KB Output is correct
9 Correct 23 ms 49604 KB Output is correct
10 Correct 25 ms 49544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 49552 KB Output is correct
2 Correct 25 ms 49488 KB Output is correct
3 Correct 26 ms 49628 KB Output is correct
4 Correct 29 ms 49508 KB Output is correct
5 Correct 29 ms 49468 KB Output is correct
6 Correct 25 ms 49608 KB Output is correct
7 Correct 24 ms 49620 KB Output is correct
8 Correct 23 ms 49620 KB Output is correct
9 Correct 23 ms 49604 KB Output is correct
10 Correct 25 ms 49544 KB Output is correct
11 Correct 26 ms 49668 KB Output is correct
12 Correct 27 ms 50036 KB Output is correct
13 Correct 29 ms 50184 KB Output is correct
14 Correct 31 ms 50028 KB Output is correct
15 Correct 36 ms 50120 KB Output is correct
16 Correct 28 ms 50036 KB Output is correct
17 Correct 27 ms 49968 KB Output is correct
18 Correct 28 ms 50132 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 3047 ms 206788 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 199 ms 62532 KB Output is correct
2 Correct 182 ms 62528 KB Output is correct
3 Correct 175 ms 62584 KB Output is correct
4 Correct 206 ms 62556 KB Output is correct
5 Correct 166 ms 62536 KB Output is correct
6 Correct 133 ms 62568 KB Output is correct
7 Correct 131 ms 62580 KB Output is correct
8 Correct 156 ms 62596 KB Output is correct
9 Correct 55 ms 50028 KB Output is correct
10 Correct 162 ms 62552 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 49552 KB Output is correct
2 Correct 25 ms 49488 KB Output is correct
3 Correct 26 ms 49628 KB Output is correct
4 Correct 29 ms 49508 KB Output is correct
5 Correct 29 ms 49468 KB Output is correct
6 Correct 25 ms 49608 KB Output is correct
7 Correct 24 ms 49620 KB Output is correct
8 Correct 23 ms 49620 KB Output is correct
9 Correct 23 ms 49604 KB Output is correct
10 Correct 25 ms 49544 KB Output is correct
11 Correct 26 ms 49668 KB Output is correct
12 Correct 27 ms 50036 KB Output is correct
13 Correct 29 ms 50184 KB Output is correct
14 Correct 31 ms 50028 KB Output is correct
15 Correct 36 ms 50120 KB Output is correct
16 Correct 28 ms 50036 KB Output is correct
17 Correct 27 ms 49968 KB Output is correct
18 Correct 28 ms 50132 KB Output is correct
19 Correct 459 ms 75836 KB Output is correct
20 Correct 474 ms 75804 KB Output is correct
21 Correct 388 ms 75832 KB Output is correct
22 Correct 347 ms 75808 KB Output is correct
23 Correct 360 ms 75848 KB Output is correct
24 Correct 288 ms 75816 KB Output is correct
25 Correct 278 ms 75816 KB Output is correct
26 Correct 400 ms 75720 KB Output is correct
27 Correct 417 ms 75816 KB Output is correct
28 Correct 408 ms 75768 KB Output is correct
29 Correct 400 ms 75812 KB Output is correct
30 Correct 428 ms 75884 KB Output is correct
31 Correct 417 ms 75776 KB Output is correct
32 Correct 415 ms 75892 KB Output is correct
33 Correct 429 ms 75836 KB Output is correct
34 Correct 296 ms 75780 KB Output is correct
35 Correct 281 ms 75796 KB Output is correct
36 Correct 267 ms 75720 KB Output is correct
37 Correct 278 ms 75916 KB Output is correct
38 Correct 279 ms 75756 KB Output is correct
39 Correct 349 ms 75756 KB Output is correct
40 Correct 240 ms 67316 KB Output is correct
41 Correct 343 ms 75712 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 23 ms 49552 KB Output is correct
2 Correct 25 ms 49488 KB Output is correct
3 Correct 26 ms 49628 KB Output is correct
4 Correct 29 ms 49508 KB Output is correct
5 Correct 29 ms 49468 KB Output is correct
6 Correct 25 ms 49608 KB Output is correct
7 Correct 24 ms 49620 KB Output is correct
8 Correct 23 ms 49620 KB Output is correct
9 Correct 23 ms 49604 KB Output is correct
10 Correct 25 ms 49544 KB Output is correct
11 Correct 26 ms 49668 KB Output is correct
12 Correct 27 ms 50036 KB Output is correct
13 Correct 29 ms 50184 KB Output is correct
14 Correct 31 ms 50028 KB Output is correct
15 Correct 36 ms 50120 KB Output is correct
16 Correct 28 ms 50036 KB Output is correct
17 Correct 27 ms 49968 KB Output is correct
18 Correct 28 ms 50132 KB Output is correct
19 Execution timed out 3047 ms 206788 KB Time limit exceeded
20 Halted 0 ms 0 KB -