Submission #1326629

#TimeUsernameProblemLanguageResultExecution timeMemory
1326629SSKMFHedgehog Daniyar and Algorithms (IZhO19_sortbooks)C++20
100 / 100
600 ms56364 KiB
#include <bits/stdc++.h>
using namespace std;

int sir[1000001] , stiva[1000001] , maxim[1000001];
vector < pair < pair <int , int> , int > > intrebari[1000001];
char rezultat[1000001];

inline void Update (int indice , const int valoare)
{
    for ( ; indice ; indice ^= (indice & -indice))
        { maxim[indice] = max(maxim[indice] , valoare); }
}

inline int Query (int indice , const int limita)
{
    int __maxim = 0;
    for ( ; indice <= limita ; indice += (indice & -indice))
        { __maxim = max(__maxim , maxim[indice]); }

    return __maxim;
}

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

    int lungime , numar_intrebari;
    cin >> lungime >> numar_intrebari;

    for (int indice = 1 ; indice <= lungime ; indice++)
        { cin >> sir[indice]; }

    for (int indice = 1 ; indice <= numar_intrebari ; indice++)
    {
        int stanga , dreapta , limita;
        cin >> stanga >> dreapta >> limita;
        intrebari[dreapta].emplace_back(make_pair(stanga , limita) , indice);
    }

    for (int indice = 1 ; indice <= lungime ; indice++)
    {
        while (stiva[0] && sir[indice] >= sir[stiva[stiva[0]]])
            { stiva[0]--; }

        if (stiva[0])
            { Update(stiva[stiva[0]] , sir[stiva[stiva[0]]] + sir[indice]); }
        
        stiva[++stiva[0]] = indice;

        for (auto& intrebare : intrebari[indice])
            { rezultat[intrebare.second] = (Query(intrebare.first.first , indice) <= intrebare.first.second ? '1' : '0'); }
    }

    for (int indice = 1 ; indice <= numar_intrebari ; indice++)
        { cout << rezultat[indice] << '\n'; }

    return 0;
}
#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...