Submission #1255285

#TimeUsernameProblemLanguageResultExecution timeMemory
1255285__ugur__Fountain (eJOI20_fountain)C++20
30 / 100
4 ms580 KiB
#include <iostream>
#include <cstdint>


using namespace std;

int diameters[10005];      // D
int capacities[10005];     // C
int next_drain[10006];     // next higher, min D (like pointer)
int stack[10002];

int main() {

    int N, Q;
    cin >> N >> Q;
    {
        diameters[0] = 0;
        capacities[0] = 0;
        uint64_t* ptr = (uint64_t*) next_drain;
        for(register register_t x=0; x<N+2; x++)
            ptr[x] = -1;
    }
    
    
    {
        int ptr = 0;
        for(int i=1; i<=N; i++) {
            int d, c;
            cin >> d >> c;
            diameters[i] = d;
            capacities[i] = c;

            i--;
            if(diameters[i] < d)
                next_drain[i] = i+1;
            else
                stack[ptr++] = i;

            while(ptr && diameters[stack[ptr-1]] < d)
                next_drain[stack[--ptr]] = i+1;
            i++;
        }
    }

    while(Q--) {
        int start, vol;
        cin >> start >> vol;
        while(1) {
            vol -= capacities[start];
            if(vol > 0) {
                start = next_drain[start];
                if(start == -1) {
                    cout << "0\n";
                    break;
                }
                continue;
            }
            cout << start << '\n';
            break;
        }
    }
    
    return 0;
}
//6 5 4 10 6 8 3 5 4 14 10 9 4 20 1 25 6 30 5 8 3 13 2 8

Compilation message (stderr)

fountain.cpp: In function 'int main()':
fountain.cpp:20:33: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
   20 |         for(register register_t x=0; x<N+2; x++)
      |                                 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...