bitset求解高维偏序
bitset求解高维偏序
今天模拟赛不想打了,于是在赛时最后几个小时看的这个。
- bitset的基础用法
简单介绍几个成员函数
- set()/set(pos) : 将所有位/第
位赋值为true,时间复杂度 / - reset()/reset(pos) : 将所有位/第
位赋值为false,时间复杂度 / - filp()/filp(pos) : 将所有位/第
取反,时间复杂度同上 - & / | / << / >> 等运算符,时间复杂度
- count() : 统计为1的个数,复杂度
求解高维偏序的话就用这几个(没有全用上),其它的函数可以看另一篇博客虽然还没有写但马上就会补
其实求解高维偏序就是求
开
枚举维度,将所有数按照维度排序
开一个新的 bitset
因为
最后
发现开
预处理的话复杂度确实不变,但是因为难写所以这篇代码是
点此查看代码
#include<bits/stdc++.h> #include<bits/extc++.h> // using namespace __gnu_pbds; // using namespace __gnu_cxx; using namespace std; #define infile(x) freopen(x,"r",stdin) #define outfile(x) freopen(x,"w",stdout) #define errfile(x) freopen(x,"w",stderr) #ifdef LOCAL FILE *InFile = infile("in.in"),*OutFile = outfile("out.out"); // FILE *ErrFile=errfile("err.err"); #else FILE *Infile = stdin,*OutFile = stdout; //FILE *ErrFile = stderr; #endif using ll=long long;using ull=unsigned long long; using db = double;using ldb = long double; const int N = 1e5 + 10; int n,emm,ans[N],a[4][N],p[4][N]; bitset<N> vis[9999]; inline void solve(){ cin>>n>>emm; for(int i = 1;i <= n; ++i) cin>>a[1][i]>>a[2][i]>>a[3][i],p[1][i] = p[2][i] = p[3][i] = i; for(int i = 1;i <= 3; ++i){ sort(p[i] + 1,p[i] + 1 + n,[=](int x,int y){return a[i][x] < a[i][y];}); } for(int l = 1,r;l <= n; l = r + 1){ r = min(l + 9990,n); for(int i = l;i <= r; ++i) vis[i-l].set(); for(int i = 1;i <= 3; ++i){ bitset<N> s;s.reset(); for(int j = 1,k = 1;j <= n; ++j){ int now = p[i][j]; for(;k <= n && a[i][p[i][k]] <= a[i][now];) s[p[i][k++]] = true; if(l <= now && now <= r) vis[now - l] &= s; } } for(int i = l;i <= r; ++i) ++ans[vis[i-l].count()]; } for(int i = 1;i <= n; ++i) cout<<ans[i]<<'\n'; } signed main(){ cin.tie(nullptr)->sync_with_stdio(false); cout.tie(nullptr)->sync_with_stdio(false); solve(); }
啥,你说要多维?改个数就好了呀!
upd : 其实预处理也不难写,就是分块写法,
但是非常难调,然后我没写出来……
__________________________________________________________________________________________
本文来自博客园,作者:CuFeO4,转载请注明原文链接:https://www.cnblogs.com/hzoi-Cu/p/18372558
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通