bitset解决高维偏序
作者:
做ac梦w
,
2023-07-30 16:21:03
,
所有人可见
,
阅读 156
#include <bits/stdc++.h>
using namespace std;
const int N = 500 + 10, C = 5e3 + 10;
#define int long long
#define endl "\n"
int a[N][C];
struct node
{
int maxv;
} tr[N * 4];
bitset<N> f[C][N], res, pos[C][N];
void solve()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
cin >> a[i][j];
}
}
for (int k = 1; k <= m; k++)
{
for (int i = 1; i <= n; i++)
{
pos[k][a[i][k]].set(i);
}
}
for (int k = 1; k <= m; k++)
{
for (int j = 1; j <= n; j++)
{
f[k][j] = f[k][j - 1] | pos[k][j];
}
}
for (int i = 1; i <= n; i++)
{
res.set();
for (int j = 1; j <= m; j++)
{
res = res & f[j][a[i][j]];
}
cout << res.count() - 1 << endl;
}
}
signed main()
{
int t = 1;
while (t--)
solve();
}