# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
49428 | SpaimaCarpatilor | City (JOI17_city) | C++17 | 583 ms | 60880 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Encoder.h"
#include<bits/stdc++.h>
using namespace std;
const int maxN = 250000;
int nr = 0, l[250009], r[250009];
long long partialS[250009];
vector < int > v[250009];
void dfs (int nod, int tata)
{
l[nod] = ++nr;
for (auto it : v[nod])
if (it != tata)
dfs (it, nod);
r[nod] = nr;
}
void Encode (int N, int A[], int B[])
{
for (int i=0; i<N - 1; i++)
v[A[i]].push_back (B[i]),
v[B[i]].push_back (A[i]);
dfs (0, -1);
partialS[0] = 0;
for (int i=1; i<=maxN; i++)
partialS[i] = partialS[i - 1] + maxN - i + 1;
for (int i=0; i<N; i++)
{
r[i] -= l[i], r[i] ++;
Code(i, partialS[l[i] - 1] + r[i]);
}
}
#include "Device.h"
#include<bits/stdc++.h>
using namespace std;
const int maxN = 250000;
static long long partialS[maxN + 2];
void InitDevice()
{
partialS[0] = 0;
for (int i=1; i<=maxN; i++)
partialS[i] = partialS[i - 1] + maxN - i + 1;
}
void decode (long long X, int &i, int &j)
{
int p = 0, u = maxN - 1, mij;
while (p <= u)
{
mij = (p + u) >> 1;
if (partialS[mij] < X) i = mij + 1, p = mij + 1;
else u = mij - 1;
}
j = X - partialS[i - 1], j += i - 1;
}
int Answer (long long S, long long T)
{
int lS, rS; decode (S, lS, rS);
int lT, rT; decode (T, lT, rT);
if (lT <= lS && rS <= rT) return 0;
if (lS <= lT && rT <= rS) return 1;
return 2;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |