답안 #926203

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
926203 2024-02-12T17:12:03 Z vjudge1 Joker (BOI20_joker) C++17
25 / 100
198 ms 19176 KB
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,unroll-loops,fast-math,O3")

#include<bits/stdc++.h>	

using namespace std;

#define all(a) a.begin(), a.end()                                                   
#define rall(a) a.rbegin(), a.rend()                 
#define sz(a) (int)a.size()
#define s second
#define f first
 
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
     
vector<pii> rid = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
vector<pii> dir = {{-1, -1}, {-1, 1}, {1, -1}, {1, 1}};
 
const int N = 4e5 + 1, mod = 998244353;

const ll inf = 1e9;
 
double eps = 1e-15;
                                                
bool flg = 0;

const int k = 2000;

bool ok = 1, was[N];
vector<pii> g(N);

int p[N + 1], pr[N];
int sz[N + 1], pt[N + 1];
vector<array<int, 2>> h;

pii get(int x) {
 	if (p[x] == x) return {x, 0};
 	pii val = get(p[x]);
 	return {val.f, (pr[x] + val.s) % 2};
}

void add(int id) {
	int u = g[id].f;
	int v = g[id].s;
	pii x = get(u);
	pii y = get(v);
	if (x.f == y.f) {
		if (x.s == y.s) {
			if (ok) {
			    h.push_back({-1, -1});
				ok = 0;
			}    
		}
		return;
	}
	if (sz[x.f] > sz[y.f]) swap(x, y);
	h.push_back({x.f, sz[x.f]});
	h.push_back({y.f, sz[y.f]});
	p[x.f] = y.f;
	pr[x.f] = (x.s + y.s + 1) % 2;  	
	sz[y.f] += sz[x.f];
}

void rb() {
	while (sz(h) && !pt[sz(h)]) {
		array<int, 2> x = h.back();
		h.pop_back();
		if (x[0] == -1) {
			ok = 1;
			continue;
		}
		p[x[0]] = x[0];
		pr[x[0]] = 0;
		sz[x[0]] = x[1];
	}
	pt[sz(h)]--; 
}

int ps[N];

void f(int l, int r, int tl, int tr) {
	if (l > r) return;
	int m = (l + r) / 2;
	pt[sz(h)]++;
	for (int i = m - 1; i >= l; i--) 
		add(i);
	pt[sz(h)]++;
	for (int i = tr; i >= m; i--) {
		add(i);
		if (!ok) {
			ps[m] = i;
			break;
		}
	}
	rb();
	add(m);
	f(m + 1, r, ps[m], tr);
	rb();
	pt[sz(h)]++;
	for (int i = tr; i > ps[m]; i--)
		add(i);
	f(l, m - 1, tl, ps[m]);
	rb();
}

void slv() {
	int n, m, q;
	cin >> n >> m >> q;
	for (int i = 1; i <= m; i++) {
		int u, v;
		cin >> u >> v;
		g[i] = g[i + m] = {u, v};
	}
	for (int i = 1; i <= n; i++) 
		p[i] = i, sz[i] = 1;
	f(1, m, 1, m);
	for (int i = 1; i <= q; i++) {
		int l, r;
		cin >> l >> r;
		if (ps[l] > r) cout << "YES\n";
		else cout << "NO\n";
	}
}                                                                           
 
main() {
	//freopen("rsq.in", "r", stdin);                                                                                     
	//freopen("rsq.out", "w", stdout);                                                                                     
	ios_base::sync_with_stdio(0);	                                                                                       
	cin.tie(0);
	int tp = 1;
	if (flg) cin >> tp;
	while (tp--) {  	
		slv();
	}
}
//wenomechainsama                                              

Compilation message

Joker.cpp:129:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  129 | main() {
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 9564 KB Output is correct
2 Correct 3 ms 9564 KB Output is correct
3 Correct 3 ms 9564 KB Output is correct
4 Incorrect 3 ms 9564 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 9564 KB Output is correct
2 Correct 3 ms 9564 KB Output is correct
3 Correct 3 ms 9564 KB Output is correct
4 Incorrect 3 ms 9564 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 9564 KB Output is correct
2 Correct 3 ms 9564 KB Output is correct
3 Correct 125 ms 16584 KB Output is correct
4 Correct 185 ms 17792 KB Output is correct
5 Correct 124 ms 19176 KB Output is correct
6 Correct 126 ms 16584 KB Output is correct
7 Correct 141 ms 16360 KB Output is correct
8 Correct 128 ms 15052 KB Output is correct
9 Correct 150 ms 15876 KB Output is correct
10 Correct 183 ms 17608 KB Output is correct
11 Correct 156 ms 16352 KB Output is correct
12 Correct 164 ms 18108 KB Output is correct
13 Correct 136 ms 14724 KB Output is correct
14 Correct 134 ms 15648 KB Output is correct
15 Correct 181 ms 18632 KB Output is correct
16 Correct 198 ms 18116 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 9564 KB Output is correct
2 Correct 3 ms 9564 KB Output is correct
3 Correct 3 ms 9564 KB Output is correct
4 Incorrect 3 ms 9564 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 9564 KB Output is correct
2 Correct 3 ms 9564 KB Output is correct
3 Correct 3 ms 9564 KB Output is correct
4 Incorrect 3 ms 9564 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 9564 KB Output is correct
2 Correct 3 ms 9564 KB Output is correct
3 Correct 3 ms 9564 KB Output is correct
4 Incorrect 3 ms 9564 KB Output isn't correct
5 Halted 0 ms 0 KB -