省选联考 2025 游记
唉。
Day1 看了每道题,猜测 t1 的合法中位数一定为一段区间刨掉没出现的数,然后发现对于每一个值 check 需要一个查询每个
发现 check 里面,如果
继续调,把代码重构了几遍也没发现错在哪,day1 就这么草率的结束了。出来同学告诉我样例 3 最后一个点没有性质,以为自己的 A 和 B 都过了,发现被每个见到的人偏序。
忘记 day1,准备 day2。真的有人能做到吗?回家看到 luogu 有自测了,写了一下
Day2 更爆炸。看了一眼,发现有两个模
先写了 t2t3 的暴力,然后写 t1,这个东西改成线段树上二分,就能做到一只
希望大家一直记得我。
“希望大家永远忘了我。”
放一下 d1t1 的
#include<bits/stdc++.h>
using ll = int;
#define For(i,j,k) for(int i = j;i <= k;i++)
#define Rep(i,j,k) for(int i = j;i >= k;i--)
#define pll pair<ll,ll>
#define fi first
#define se second
using namespace std;
const int N = 1e6 + 10;
struct FHQ{
#define ls t[p].s[0]
#define rs t[p].s[1]
struct P{ll v,sz,dt,o1,o2,smo1,smo2,s[2];}t[N];ll x,y,z,to,rt;
void it(ll n){rt = to = 0;For(i,1,n) t[i] = {0,0,0,0,0,0,0,{0,0}};}
void psu(ll p){t[p].sz = t[ls].sz + t[rs].sz + 1;
t[p].smo1 = t[ls].smo1 + t[rs].smo1 + t[p].o1;
t[p].smo2 = t[ls].smo2 + t[rs].smo2 + t[p].o2;
}void sptv(ll p,ll k,ll &x,ll &y){if(p == 0){x = y = 0;return;}
t[p].v <= k ? (x = p,sptv(rs,k,rs,y)) : (y = p,sptv(ls,k,x,ls));psu(p);
}ll mrg(ll u,ll v){if(!u || !v) return u | v;
if(t[u].dt < t[v].dt) return t[u].s[1] = mrg(t[u].s[1],v),psu(u),u;
else return t[v].s[0] = mrg(u,t[v].s[0]),psu(v),v;
}ll nw(ll v,ll o1,ll o2){t[++to] = {v,1,rand(),o1,o2,o1,o2,{0,0}};return to;}
void ist(ll v,ll o1,ll o2){sptv(rt,v,x,y),rt = mrg(mrg(x,nw(v,o1,o2)),y);}
pll qryl(ll v){sptv(rt,v,x,y);pll tp = {t[x].smo1,t[x].smo2};rt = mrg(x,y);return tp;}
pll qryr(ll v){sptv(rt,v - 1,x,y);pll tp = {t[y].smo1,t[y].smo2};rt = mrg(x,y);return tp;}
}trl,trr;ll n,o,sm,ans,l1[N],l2[N],r1[N],r2[N];bool chk(ll v){
o = 0;ll mnx,mny,mxx,mxy;pll q1 = trl.qryr(v + 1),q2 = trr.qryl(v - 1);
mxx = q1.fi,mxy = q1.se,mnx = q2.fi,mny = q2.se,o = sm - mxy - mny;if(!o) return 0;
if((mxx <= mnx && mnx <= mxy) || (mxx <= mny && mny <= mxy)) return 1;ll o1,o2;
if(mxy < mnx) o1 = mnx,o2 = mxy;else o1 = mny,o2 = mxx;ll m = o + o1 + o2,tp = (m + 1) / 2;
return tp > o1 && tp <= o1 + o;
}void sol(ll c){ans = sm = 0;
cin >> n;For(i,1,n) cin >> l1[i] >> r1[i] >> l2[i] >> r2[i],sm += r1[i];
For(i,1,n) trl.ist(l2[i],l1[i],r1[i]),trr.ist(r2[i],l1[i],r1[i]);
For(v,1,n) if(chk(v)) ans++;cout << ans << '\n';trl.it(n),trr.it(n);
}int main(){
freopen("lucky.in","r",stdin),freopen("lucky.out","w",stdout);
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
ll T,c;cin >> c >> T;while(T--) sol(c);return 0;
}