Code
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 512;
int t, n, m, cnt;
int cori[N], flag[N];
inline void qs(int l, int r){
for (int i = l; i <= r; ++i){
for (int j = i + 1; j <= r; ++j){
if(cori[i] > cori[j]){
swap(cori[i], cori[j]);
swap(flag[i], flag[j]);
}
if(cori[i] == cori[j]){
if(flag[i] < flag[j]){
swap(cori[i], cori[j]);
swap(flag[i], flag[j]);
}
}
}
}
}
int main(int argc, char const *argv[]){
scanf("%d", &t);
for (int i = 0; i < t; ++i){
scanf("%d", &n);
memset(cori, 0, sizeof(cori));
memset(flag, 0, sizeof(flag));
for (int j = 1; j <= n; ++j){
scanf("%d%d", &cori[2 * j - 1], &cori[2 * j]);
if(cori[2 * j - 1] % 2)cori[2 * j - 1]++;
if(cori[2 * j] % 2)cori[2 * j]++;
if(cori[2 * j - 1] > cori[2 * j])swap(cori[2 * j - 1], cori[2 * j]);
flag[2 * j - 1] = 1;
flag[2 * j] = -1;
}
qs(1, 2 * n);
cnt = 0;
m = 0;
for (int j = 1; j <= 2 * n; ++j){
if(flag[j] == 1)cnt++;
if(flag[j] == -1)cnt--;
if(cnt > m)m = cnt;
}
printf("%d
", m * 10);
}
return 0;
}
Review
- 水题,因为数据规模很小,直接bf就行
- WA是因为一开始手写快排写错了;后来发现网上的一些std是错的,貌似不能用快排,因为用来标记起点终点的flag数组不能被不稳定的快排排好
- 想到过线段树,但感觉和bf没区别