rt,不知道哪里错了。
#include <bits/stdc++.h>
//#define int long long
#define gcd __gcd
#define il inline
#define pii pair<int, int>
#define fir first
#define sec second
#define pb push_back
#define eb emplace_back
#define file(name) freopen(name".in", "r", stdin); freopen(name".out", "w", stdout);
#define rep(i, l, r) for(int i = (l); i <= (r); ++i)
#define per(i, r, l) for(int i = (r); i >= (l); --i)
using namespace std;
typedef long long ll;
const int N = 2e5 + 10, M = N * 4, mod = 998244353, INF = 0x3f3f3f3f;
const ll INFLL = 0x3f3f3f3f3f3f3f3f;
int n, m, k, x, y, l, r;
vector<pii> g[M];
#define mid (l + r >> 1)
#define lc(k) (k << 1)
#define rc(k) (k << 1 | 1)
void update(int k, int l, int r, int L, int R) {
if(l >= L && r <= R) return g[k].pb({x, y});
if(L <= mid) update(lc(k), l, mid, L, R);
if(R > mid) update(rc(k), mid + 1, r, L, R);
}
int fa[N], sz[N];
stack<int> s;
il int find(int x) {
while(x != fa[x]) x = fa[x];
return x;
}
il void merge(int x, int y) {
// cout << "merge" << x << ' ' << y << endl;
if(x == y) return ;
if(sz[x] > sz[y]) swap(x, y);
s.push(x);
fa[x] = y; sz[y] += sz[x];
}
il void del() {
int x = s.top(); s.pop();
// cout << "del" << x << ' ' << y << endl;
sz[fa[x]] -= sz[x]; fa[x] = x;
}
void dfs(int k, int l, int r, bool res = 1) {
// cout << k << ':' << l << ' ' << r << '=' << res << endl;
int cnt = s.size();
for(auto [x, y] : g[k]) {
int p = find(x), q = find(y);
res &= (p != q);
// cout << "q" << x << ' ' << y << ':' << p << ' ' << q << endl;
merge(p, find(y + n));
merge(find(x + n), q);
}
if(l == r) cout << (res ? "Yes\n" : "No\n");
else dfs(lc(k), l, mid, res), dfs(rc(k), mid + 1, r, res);
while(s.size() > cnt) del();
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m >> k;
rep(i, 1, 2*n) fa[i] = i, sz[i] = 1;
rep(i, 1, m) {
cin >> x >> y >> l >> r;
if(l != r) update(1, 1, k, l + 1, r);
}
dfs(1, 1, k);
return 0;
}