求解释题解
  • 板块灌水区
  • 楼主Chtholly__Nota
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/20 16:03
  • 上次更新2024/10/20 18:33:46
查看原帖
求解释题解
847559
Chtholly__Nota楼主2024/10/20 16:03

一段题解,没看懂

#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std ;
#define rep(i, a, b) for (register int i = a; i <= b; i++)
#define per(i, a, b) for (register int i = a; i >= b; i--)
const int N = 200010 ;
int n, m, q ;
int bl[N], pos[N], neg[N], x[N], y[N], ans[N] ;
struct qry {
	int x, l, r, id ;
	inline bool operator < (const qry &rhs) const {
		return bl[l] == bl[rhs.l] ? ((bl[l] & 1) ? r < rhs.r : r > rhs.r) : l < rhs.l ;
	}
} a[N] ;
inline void upd1(register int i) {
	swap(pos[x[i]], pos[y[i]]) ;
	swap(neg[pos[x[i]]], neg[pos[y[i]]]);
}
inline void upd2(register int i) {
	swap(neg[x[i]], neg[y[i]]) ;
	swap(pos[neg[x[i]]], pos[neg[y[i]]]);
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>q;
	rep(i, 1, n) pos[i] = neg[i] = i ;
	rep(i, 1, m) cin>>x[i]>>y[i]; 
	rep(i, 1, q) {cin>>a[i].x>>a[i].l>>a[i].r;a[i].id = i ;}
	rep(i, 1, m) bl[i] = (i - 1) / sqrt(m) + 1 ;
	sort(a + 1, a + q + 1) ; 
	int l = 1, r = 0 ;
	rep(i, 1, q) {
		while (l > a[i].l) upd1(--l) ;
		while (r < a[i].r) upd2(++r) ;
		while (l < a[i].l) upd1(l++) ;
		while (r > a[i].r) upd2(r--) ;
		ans[a[i].id] = pos[a[i].x] ;
		cout<<a[i].l<<" "<<a[i].r<<" "<<pos[a[i].x]<<endl;;
	}
	//rep(i, 1, q) cout<<ans[i]<<"\n";
	return 0 ;
}

2024/10/20 16:03
加载中...