# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
469091 | 2021-08-30T16:36:44 Z | gavgav | Fountain (eJOI20_fountain) | C++17 | 940 ms | 524292 KB |
#include <iostream> #include <vector> #include <stack> using namespace std; int main(){ // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); /* * Get dates about fountain. * Creating array in witch every number denotes index of the nearest number witch greater than this reservoir. * Indexes in this array means number of reservoir. */ int copy_height; int streams_number = 0, queries; scanf("%d%d", ©_height, &queries); const int height = copy_height; int diameters[height], next_grater[height], capacities[height + 1]; capacities[height] = 0; vector <int> starts; stack <int> meowmeow; for (int i = 0; i < height; i++){ scanf("%d%d", &diameters[i], &capacities[i]); if (!meowmeow.empty() && diameters[i] > diameters[meowmeow.top()]){ do{ next_grater[meowmeow.top()] = i; meowmeow.pop(); }while (!meowmeow.empty() && diameters[i] > diameters[meowmeow.top()]); } else{ streams_number++; starts.push_back(i); } meowmeow.push(i); } while (!meowmeow.empty()){ next_grater[meowmeow.top()] = height; meowmeow.pop(); } /* * Creating of any possible water path. */ int affiliation[height], indexes[height]; int lengths[streams_number] {}; vector <int> streams[streams_number]; for (int i = 0; i < streams_number; i++){ for (int j = starts[i], k = 0; j != height; j = next_grater[j], k++) { streams[i].push_back(j); lengths[i]++; indexes[j] = k; affiliation[j] = i; } streams[i].push_back(height); } /* * Creating postfix sums array. */ for (int i = height - 1; i > -1; i--){ capacities[i] += capacities[next_grater[i]]; } /* * Get queries and by binary search print answer. */ int volume, level, left, right, middle, answer; while (queries--){ scanf("%d%d", &level, &volume); level--; left = indexes[level] + 1, right = lengths[affiliation[level]], answer = streams[affiliation[level]][indexes[level]] + 1; while (left - right < 1){ middle = (left + right) / 2; if (volume > capacities[level] - capacities[streams[affiliation[level]][middle]]){ answer = streams[affiliation[level]][middle] + 1; left = middle + 1; } else { right = middle - 1; } } printf("%d\n", answer % (height + 1)); } }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 204 KB | Output is correct |
2 | Correct | 1 ms | 204 KB | Output is correct |
3 | Correct | 1 ms | 332 KB | Output is correct |
4 | Correct | 2 ms | 332 KB | Output is correct |
5 | Correct | 1 ms | 204 KB | Output is correct |
6 | Correct | 2 ms | 588 KB | Output is correct |
7 | Correct | 2 ms | 332 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 100 ms | 3272 KB | Output is correct |
2 | Correct | 113 ms | 3256 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 204 KB | Output is correct |
2 | Correct | 1 ms | 204 KB | Output is correct |
3 | Correct | 1 ms | 332 KB | Output is correct |
4 | Correct | 2 ms | 332 KB | Output is correct |
5 | Correct | 1 ms | 204 KB | Output is correct |
6 | Correct | 2 ms | 588 KB | Output is correct |
7 | Correct | 2 ms | 332 KB | Output is correct |
8 | Correct | 100 ms | 3272 KB | Output is correct |
9 | Correct | 113 ms | 3256 KB | Output is correct |
10 | Correct | 2 ms | 332 KB | Output is correct |
11 | Correct | 940 ms | 483624 KB | Output is correct |
12 | Correct | 154 ms | 3844 KB | Output is correct |
13 | Runtime error | 936 ms | 524292 KB | Execution killed with signal 9 |
14 | Halted | 0 ms | 0 KB | - |