牛客多校2020 Greater and Greater
https://ac.nowcoder.com/acm/contest/5667/G
题解其实有个前置知识,先整出一个O(n*m)的写法,很简单。但是需要优化。
利用bitset数1的个数计算答案,排好顺序。具体看神仙的代码吧,真的很强!我是看代码学会的
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<bitset>
using namespace std;
const int maxn = 2e5 + 11;
vector<pair<int, int> >A, B;
bitset<maxn>ans, G;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n, m;
cin >> n >> m;;
int x;
for (int i = 1; i <= n; i++) {
cin >> x;
A.push_back({ x,i });
}
for (int i = 1; i <= m; i++) {
cin >> x;
B.push_back({ x,i });
}
sort(A.begin(), A.end());
sort(B.begin(), B.end());
ans.set();
for (int i = m - 1, j = n - 1; i >= 0; i--) {
while (j >= 0 && A[j].first >= B[i].first) {
G.set(A[j--].second);
}
ans &= G >> B[i].second;
}
cout << ans.count() << endl;
return 0;
}
寻找真正的热爱

浙公网安备 33010602011771号