# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
296947 | ChrisT | Werewolf (IOI18_werewolf) | C++17 | 1258 ms | 120188 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 <bits/stdc++.h>
#include "werewolf.h"
using namespace std;
const int MN = 2e5 + 3;
struct Query {
int l,r,l2,r2,id;
};
vector<int> check_validity (int n, vector<int> x, vector<int> y, vector<int> s, vector<int> e, vector<int> l, vector<int> r) {
int m = (int)x.size(), qq = (int)s.size(), LOG = __lg(n) + 1;
vector<vector<int>> aaa(n+1); array<vector<vector<int>>,2> adj;
for (int j = 0; j < 2; j++) adj[j].resize(n+1);
vector<int> ret(qq);
for (int i = 0; i < m; i++) {
aaa[++x[i]].push_back(++y[i]);
aaa[y[i]].push_back(x[i]);
}
vector<int> p(n+1);
iota(p.begin(),p.end(),0); //1 is for >=, 0 is for <=
const auto find = [&] (int x, const auto &find_ref) -> int {
return p[x] == x ? x : p[x] = find_ref(p[x],find_ref);
};
const auto merge = [&] (int a, int b, bool lt) {
if ((a = find(a,find)) == (b = find(b,find))) return;
if ((a > b) ^ lt) swap(a,b);
p[a] = b; adj[lt][b].push_back(a);
};
for (int i = n; i >= 1; i--) for (int j : aaa[i]) if (j > i) merge(i,j,1);
iota(p.begin(),p.end(),0);
for (int i = 1; i <= n; i++) for (int j : aaa[i]) if (j < i) merge(i,j,0);
int tt = 0; array<vector<int>,2> st,ed,which; array<vector<vector<int>>,2> jmp, par;
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |