#include <cstdio>
#include <algorithm>
#include <climits>
#include "krazki.h"
#include "message.h"
#define MAX_N 30000000
using namespace std;
long long tube[MAX_N + 2];
int n, m;
void read() {
n = PipeHeight();
m = NumberOfDiscs();
tube[0] = LLONG_MAX;
for (int i = 1; i <= n; i++) {
long long diam = HoleDiameter(i);
tube[i] = min(tube[i-1], diam);
}
tube[n + 1] = 0;
}
int compute() {
int pos = n + 1;
for (int i = 1; i <= m; i++) {
long long disc = DiscDiameter(i);
if (pos > 0) {
pos--;
}
while (tube[pos] < disc) {
pos--;
}
}
return pos;
}
int main() {
if (MyNodeId() == 0) {
read();
printf("%d\n", compute());
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #include <cstdio> #include <algorithm> #include <climits> #include "krazki.h" #include "message.h" #define MAX_N 30000000 using namespace std; long long tube[MAX_N + 2]; int n, m; void read() { n = PipeHeight(); m = NumberOfDiscs(); tube[0] = LLONG_MAX; for (int i = 1; i <= n; i++) { long long diam = HoleDiameter(i); tube[i] = min(tube[i-1], diam); } tube[n + 1] = 0; } int compute() { int pos = n + 1; for (int i = 1; i <= m; i++) { long long disc = DiscDiameter(i); if (pos > 0) { pos--; } while (tube[pos] < disc) { pos--; } } return pos; } int main() { if (MyNodeId() == 0) { read(); printf("%d\n", compute()); } return 0; } |
English