<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      2025.3.23 鮮花

      [省選聯(lián)考 2025] 追憶 題解

      hello (bpm) 2025

      恭喜獲得 最速被擊破獎??

      不會 bitset,賽時想不到分塊也是沒救了。

      首先必然要堅定 bitset 信念,因為其嚴格難于導出子圖。

      維護后繼直接 bitset 就是 \(\frac{nm}w\) 的。

      考慮到第二個限制 \(l, r\) 如何維護,容易想到的暴力是開 \(n\) 個 bitset,維護出 \(k \in [1, n]\) 的所有集合 \(A_k = \{i \mid a_i \ge k\}\),但是首先空間開不下,其次還有修改。

      于是乎想到分塊, 設塊長是 \(B\),則只維護 \(k = xB\),這樣修改是 \(\frac nB\) 的,查詢是 \(B\) 的,平衡得 \(\sqrt n\)。

      這樣我們就得到了限制集合 \(C\)

      考慮如何求出最大的 \(b\),依然類似維護出 \(B_k\),其等價于是最大的一個 \(k\),滿足 \(B_k \cap C \not = \varnothing \And B_{k + 1} \cap C = \varnothing\),依然類似的分塊,如果暴力二分復雜度是 \(\frac{n\log \sqrt n}w + \sqrt n\) 的,好像能過 88pts。

      考慮優(yōu)化,容易發(fā)現(xiàn)前面的集合對后面有偏序關系,所以這是一個類似前綴和上二分的形式,考慮雙指針,手寫 bitset,將判斷拆成 \(\frac nw\) 個 ull 判交,于是我們枚舉每個 ull,維護一個 \(p\) 表示當前的 \(k\),每次嘗試更新 \(k \gets k + 1\),最后的 \(p\) 顯然就是 \(k\)。

      最終復雜度 \(\mathcal O(\frac{(n + m)q}w + q\sqrt n)\)

      Code
      /* Local File
      in_out/in.in
      in_out/out.out
      */
      #include <bits/stdc++.h>
      using namespace std;
      using llt = long long;
      using ull = unsigned long long;
      using llf = long double;
      #define endl '\n'
       
      const int N = 1e5 + 3, W = 64, D = N / W + 1, B = 600, S = N / B + 3;
      int n, m, q, va[N], vb[N], pa[N], pb[N];
      
      class Bset{
      private:
      	ull o[D];
      public:
      	bool operator[](int p) const{
      		int l = p / W, r = p - l * W;
      		return (o[l] >> r) & 1;
      	}
      	ull &operator()(int p){
      		return o[p]; 
      	}
      	void Set(int p){
      		int l = p >> 6, r = p - l * W;
      		o[l] = o[l] | (1ull << r);
      	}
      	void Res(int p){
      		int l = p >> 6, r = p - l * W;
      		o[l] = o[l] & ~(1ull << r);
      	}
      	Bset &operator|=(const Bset &_){
      		for(int i = 0; i < D; ++i)
      			o[i] |= _.o[i];
      		return *this;
      	}
      	Bset operator|(const Bset &_) const{
      		Bset r(*this);
      		return r |= _;
      	}
      	Bset &operator^=(const Bset &_){
      		for(int i = 0; i < D; ++i)
      			o[i] ^= _.o[i];
      		return *this;
      	}
      	Bset operator^(const Bset &_) const{
      		Bset r(*this);
      		return r ^= _;
      	}
      	Bset &operator&=(const Bset &_){
      		for(int i = 0; i < D; ++i)
      			o[i] &= _.o[i];
      		return *this;
      	}
      	Bset operator&(const Bset &_) const{
      		Bset r(*this);
      		return r &= _;
      	}
      };
      
      Bset sn[N], ca[S], cb[S];
      int bln, id[N], bl[N], br[N];
      
      struct Gph{
      	vector<int> to[N];
      	void Add(int u, int v){
      		to[u].emplace_back(v);
      	}
      	void ADD(int u, int v){
      		Add(u, v), Add(v, u);
      	}
      	void Clr(){
      		for(int i = 1; i <= n; ++i)
      			to[i].clear();
      	}
      #define For_to(u, v, g) for(auto v : g.to[u])
      } g, rg;
      
      int rd[N];
      void Solve(){
      	cin >> n >> m >> q;
      	for(int i = 1; i <= m; ++i){
      		int u, v; cin >> u >> v;
      		g.Add(u, v), ++rd[u], rg.Add(v, u);
      	}
      	for(int i = 1; i <= n; ++i)
      		cin >> va[i], pa[va[i]] = i;
      	for(int i = 1; i <= n; ++i)
      		cin >> vb[i], pb[vb[i]] = i;
      	queue<int> que;
      	for(int i = 1; i <= n; ++i) if(!rd[i])
      		que.emplace(i);
      	while(!que.empty()){
      		int u = que.front(); que.pop();
      		sn[u].Set(u);
      		For_to(u, v, g) sn[u] |= sn[v];
      		For_to(u, v, rg)
      			if(!--rd[v]) que.emplace(v);
      	}
      	bln = 0;
      	for(int l = 1; l <= n; l += B){
      		++bln;
      		for(int j = bl[bln] = l, r = br[bln] = min(l + B - 1, n); j <= r; ++j)
      			ca[bln].Set(pa[j]), cb[bln].Set(pb[j]), id[j] = bln;
      	}
      	for(int i = bln - 1; i; --i)
      		ca[i] |= ca[i + 1], cb[i] |= cb[i + 1];
      	for(int tst = 1; tst <= q; ++tst){
      		int op; cin >> op;
      		if(op == 1){
      			int x, y; cin >> x >> y;
      			int ix = id[va[x]], iy = id[va[y]];
      			swap(va[x], va[y]), pa[va[x]] = x, pa[va[y]] = y;
      			for(int i = 1; i <= ix; ++i) ca[i].Res(x);
      			for(int i = 1; i <= iy; ++i) ca[i].Set(x);
      			for(int i = 1; i <= iy; ++i) ca[i].Res(y);
      			for(int i = 1; i <= ix; ++i) ca[i].Set(y);
      		}else if(op == 2){
      			int x, y; cin >> x >> y;
      			int ix = id[vb[x]], iy = id[vb[y]];
      			swap(vb[x], vb[y]), pb[vb[x]] = x, pb[vb[y]] = y;
      			for(int i = 1; i <= ix; ++i) cb[i].Res(x);
      			for(int i = 1; i <= iy; ++i) cb[i].Set(x);
      			for(int i = 1; i <= iy; ++i) cb[i].Res(y);
      			for(int i = 1; i <= ix; ++i) cb[i].Set(y);
      		}else{
      			int u, l, r; cin >> u >> l >> r;
      			int il = id[l], ir = id[r];
      			Bset k(ca[il] ^ ca[ir]);
      			for(int i = bl[ir]; i <= r; ++i) k.Set(pa[i]);
      			for(int i = bl[il]; i < l; ++i) k.Res(pa[i]);
      			k &= sn[u];
      			int p = 0;
      			for(int i = 0; i < D; ++i)
      				while(p < bln && (cb[p + 1](i) & k(i))) ++p;
      			if(!p) cout << 0 << endl;
      			else
      				for(int i = br[p]; i >= bl[p]; --i){
      					int p = pb[i];
      					if(k[p]){
      						cout << i << endl;
      						break;
      					}
      				}
      		}
      	}
      }
      
      void Clear(){
      	memset(sn, 0, sizeof sn);
      	memset(ca, 0, sizeof ca);
      	memset(cb, 0, sizeof cb);
      	g.Clr(), rg.Clr();
      }
      
      int main(){
      	ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
      	int c, t; cin >> c >> t;
      	while(t--) Solve(), Clear();
      }
      
      P

      posted @ 2025-03-23 09:53  xrlong  閱讀(52)  評論(2)    收藏  舉報

      Loading

      主站蜘蛛池模板: 国产影片AV级毛片特别刺激| 日韩人妻少妇一区二区三区| 国产成人午夜福利在线播放| 国语精品国内自产视频| 黑巨人与欧美精品一区| 国产欧美久久一区二区三区| 精品激情视频一区二区三区| 亚洲av成人无码天堂| 午夜射精日本三级| 亚洲精品日韩在线观看| 欧美国产成人精品二区芒果视频| 伊人av超碰伊人久久久| 日韩人妻无码精品久久| 2020精品自拍视频曝光| 唐人社导航福利精品| 亚洲一区中文字幕第十页| 一区二区中文字幕久久| 日本高清视频色欧WWW| 国产精品一区二区日韩精品| 国产精品美女黑丝流水| 国产欧美日韩精品丝袜高跟鞋| 日本中文字幕在线| 在线中文字幕国产一区| 国产精品天堂蜜av在线播放| 免费人成视频x8x8国产| 中文字幕有码在线第十页| 亚洲一区二区乱码精品| 国产无遮挡性视频免费看| 蕉岭县| 国产盗摄xxxx视频xxxx| 成人嫩草研究院久久久精品| 操操操综合网| 国产成人欧美一区二区三区在线| 亚洲精品久久久久成人2007| 日韩精品一区二区三区无| 精品国产迷系列在线观看| 狠狠色噜噜狠狠亚洲AV| 国产偷拍自拍视频在线观看| 亚洲欧美中文日韩在线v日本| 乱女乱妇熟女熟妇综合网| 99久久精品国产一区二区蜜芽|