Task: | Company Queries II |
Sender: | snude |
Submission time: | 2024-10-20 10:53:19 +0300 |
Language: | C++ (C++11) |
Status: | READY |
Result: | WRONG ANSWER |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.00 s | details |
#2 | WRONG ANSWER | 0.00 s | details |
#3 | ACCEPTED | 0.00 s | details |
#4 | WRONG ANSWER | 0.00 s | details |
#5 | WRONG ANSWER | 0.00 s | details |
#6 | WRONG ANSWER | 0.64 s | details |
#7 | WRONG ANSWER | 0.57 s | details |
#8 | WRONG ANSWER | 0.64 s | details |
#9 | WRONG ANSWER | 0.62 s | details |
#10 | WRONG ANSWER | 0.62 s | details |
#11 | WRONG ANSWER | 0.00 s | details |
#12 | WRONG ANSWER | 0.62 s | details |
Code
#include <algorithm>#include <cmath>#include <cstdio>#include <cstdlib>#include <iostream>#include <vector>#include <bits/stdc++.h>using namespace std;using ll = long long;// Debug printing#ifdef DEBUG#define deb(fmt, args...) printf("DEBUG: %d: " fmt, __LINE__, ##args)#else#define deb(fmt, args...)#endifvoid print_array(vector<int> in, const string title = "Vector"){cout << title << " [\n";for (const auto &el : in) {cout << el << " ";}cout << "\n] END\n";}void print_matrix(vector<vector<int> > in, const string title = "Matrix"){cout << title << " [\n";for (unsigned int i = 0; i < in.size(); i++) {cout << "row " << i << ": ";for (unsigned int j = 0; j < in[i].size(); j++) {cout << in[i][j] << " ";}cout << "\n";}cout << "] END\n";}void dfs(int s, vector<bool> &visited, vector<vector<int> > &adj,vector<int> &traversal){if (visited[s]) {return;};visited[s] = true;traversal.push_back(s);for (auto u : adj[s]) {dfs(u, visited, adj, traversal);traversal.push_back(s);}}void build_sparse_table(vector<int> &in, vector<vector<int> > &sparse){int rows = 1;rows = log2(in.size()) + 1;sparse.clear(); // clear tablesparse.push_back(vector<int>());for (unsigned int i = 0; i < in.size(); i++) {sparse[0].push_back(in[i]);}for (int i = 1; i < rows; i++) {sparse.push_back(vector<int>()); // needed rowsint len = 1 << i;int w = len / 2;for (unsigned int j = 0; j < in.size() - len + 1; j++) {int minimum =min(sparse[i - 1][j], sparse[i - 1][j + w]);sparse[i].push_back(minimum);}}}int query_sparse_table(int a, int b, vector<vector<int> > &sparse){int L = min(a, b);int R = max(a, b);int num = 1;if (L == R) {if (L == 0) return 1;return sparse[0][L - 1];}while (num < R - L)num <<= 1;if (num != R - L) {num >>= 1;}int row = log2(num);return min(sparse[row][L], sparse[row][R - num]);}int main(int argc, char *argv[]){// Read the input parametersint n, q;cin >> n >> q;// Read values from one linevector<vector<int> > kids(n + 1, vector<int>());int tmp;for (int i = 0; i < n - 1; i++) {cin >> tmp;kids[tmp].push_back(i + 2);}// print_matrix(kids);// Build traversal arrayvector<bool> visited(n, false);vector<int> traversal;dfs(1, visited, kids, traversal);// Find the first occurence of nodevector<int> first(n + 1, -1);for (unsigned int i = 0; i < traversal.size(); i++) {if (first[traversal[i]] == -1) {first[traversal[i]] = i;}// deb("i: %d, traversal[i]: %d, first[traversal[i]]: %d\n", i,// traversal[i], first[traversal[i]]);}// traversal[0] = 1;// print_array(traversal, "traversal");// print_array(first, "first");// Build sparse tablevector<vector<int> > sparse;build_sparse_table(traversal, sparse);// print_matrix(sparse);// Do queriesint l, r;for (int i = 0; i < q; i++) {cin >> l >> r;l = first[l];r = first[r];// deb("väli (%d, %d)\n", l, r);int res = query_sparse_table(l, r, sparse);cout << res << "\n";}return 0;}
Test details
Test 1
Verdict: ACCEPTED
input |
---|
10 10 1 2 3 4 5 6 7 8 9 6 9 8 10 10 3 ... |
correct output |
---|
6 8 3 1 8 ... |
user output |
---|
6 8 3 1 8 ... |
Test 2
Verdict: WRONG ANSWER
input |
---|
10 10 1 1 1 1 1 1 1 1 1 1 7 3 4 4 1 ... |
correct output |
---|
1 1 1 1 1 ... |
user output |
---|
1 1 1 1 1 ... |
Test 3
Verdict: ACCEPTED
input |
---|
10 10 1 1 1 1 2 3 4 4 1 1 8 2 7 8 3 ... |
correct output |
---|
1 1 1 1 1 ... |
user output |
---|
1 1 1 1 1 ... |
Test 4
Verdict: WRONG ANSWER
input |
---|
10 10 1 1 3 1 2 2 5 3 9 7 2 7 6 3 9 ... |
correct output |
---|
2 2 3 1 1 ... |
user output |
---|
2 2 3 1 1 ... |
Test 5
Verdict: WRONG ANSWER
input |
---|
10 10 1 2 3 2 5 3 2 2 4 6 1 1 3 1 9 ... |
correct output |
---|
1 1 1 2 2 ... |
user output |
---|
1 1 1 2 2 ... |
Test 6
Verdict: WRONG ANSWER
input |
---|
200000 200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
74862 8750 16237 72298 58111 ... |
user output |
---|
74862 8750 16237 72298 58111 ... Truncated |
Test 7
Verdict: WRONG ANSWER
input |
---|
200000 200000 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ... |
correct output |
---|
1 1 1 1 1 ... |
user output |
---|
1 1 1 1 1 ... Truncated |
Test 8
Verdict: WRONG ANSWER
input |
---|
200000 200000 1 2 1 2 3 2 1 6 3 1 10 12 13 4... |
correct output |
---|
1 2 2 2 1 ... |
user output |
---|
1 2 2 2 1 ... Truncated |
Test 9
Verdict: WRONG ANSWER
input |
---|
200000 200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
2796 633 633 151 2690 ... |
user output |
---|
2796 633 633 151 2690 ... Truncated |
Test 10
Verdict: WRONG ANSWER
input |
---|
200000 200000 1 2 3 4 5 6 7 8 9 10 11 12 13 ... |
correct output |
---|
365 73 103 365 216 ... |
user output |
---|
365 73 103 365 216 ... Truncated |
Test 11
Verdict: WRONG ANSWER
input |
---|
2 4 1 1 1 1 2 2 1 ... |
correct output |
---|
1 1 1 2 |
user output |
---|
1 1 1 1 |
Test 12
Verdict: WRONG ANSWER
input |
---|
200000 200000 1 1 2 3 4 5 6 7 8 9 10 11 12 1... |
correct output |
---|
27468 6353 27468 6353 6353 ... |
user output |
---|
27468 6353 27468 6353 6353 ... Truncated |