#include <bits/stdc++.h>
#include "icc.h"
using namespace std;
typedef pair<int,int> ii;
#define f(i,a,b) for(int i = a; i < b; i++)
#define ff first
#define ss second
int n, p[105], a[105], b[105];
vector <int> adj[105], parents;
void divide(vector <ii> v1, vector <ii> v2, vector <ii> &a1, vector <ii> &a2){
for(auto p: v1){
int l = p.ff, r = p.ss, sz = r-l+1;
if(sz > 1) a1.push_back({l, l+sz/2-1}), a2.push_back({l+sz/2, r});
else a1.push_back({l, r});
}
for(auto p: v2){
int l = p.ff, r = p.ss, sz = r-l+1;
if(sz > 1) a1.push_back({l, l+sz/2-1}), a2.push_back({l+sz/2, r});
else a1.push_back({l, r});
}
}
vector <int> get(vector <ii> v){
vector <int> ra;
for(auto p: v){
int l = p.ff, r = p.ss;
f(i,l,r+1) for(int x: adj[parents[i]]) ra.push_back(x);
}
return ra;
}
bool Q(int x, int y, vector <int> ra, vector <int> ta){
f(i,0,x) a[i] = ra[i];
f(i,0,y) b[i] = ta[i];
return query(x, y, a, b);
}
void run(int x){
n = x;
f(i,1,n+1) adj[i] = {i}, p[i] = i;
f(ra,1,n){
parents.clear(); vector <ii> v1, v2; vector <int> V1, V2;
f(i,1,n+1) if(adj[i].size()) parents.push_back(i);
int sz = parents.size();
v1 = {{0, sz-1}};
while(1){
vector <ii> aux1, aux2;
divide(v1, v2, aux1, aux2);
v1 = aux1, v2 = aux2;
V1 = get(v1), V2 = get(v2);
if(Q(V1.size(), V2.size(), V1, V2)) break;
}
while(V1.size() > 1){
int s = V1.size();
vector <int> ra, ta;
f(i,0,s/2) ra.push_back(V1[i]); f(i,s/2,s) ta.push_back(V1[i]);
if(Q(V2.size(), ra.size(), V2, ra)) V1 = ra;
else V1 = ta;
}
while(V2.size() > 1){
int s = V2.size();
vector <int> ra, ta;
f(i,0,s/2) ra.push_back(V2[i]); f(i,s/2,s) ta.push_back(V2[i]);
if(Q(V1.size(), ra.size(), V1, ra)) V2 = ra;
else V2 = ta;
}
int x = V1[0], y = V2[0];
x = p[x], y = p[y];
setRoad(x, y);
for(int wi: adj[x]) p[wi] = y, adj[y].push_back(wi);
adj[x].clear();
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2 ms |
460 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
460 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
420 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
424 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
424 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
460 KB |
Wrong road! |
2 |
Halted |
0 ms |
0 KB |
- |