警示后人(如果你40/34pts)
查看原帖
警示后人(如果你40/34pts)
742907
ManGo_Mouse楼主2024/8/7 14:38
  1. 数组要开到 1.5×1061.5\times 10^6
// wrong
const int N = 1.5e5;
// right
const int N = 1.5e6;
  1. 你的 cmp 有没有套上分块的数组?
// wrong
bool cmp (node a, node b) {
    if (a.x == b.x && a.y == b.y)
        return a.t < b.t;
    if (a.x == b.x)
        return a.y < b.y;
    return a.x < b.x;
}
// right
bool cmp (node a, node b) {
    if (bl[a.x] == bl[b.x] && bl[a.y] == bl[b.y])
        return a.t < b.t;
    if (bl[a.x] == bl[b.x])
        return bl[a.y] < bl[b.y];
    return bl[a.x] < bl[b.x];
}
  1. 你输入时的数组编号是不是直接用 i 了?
// wrong
cntQ ++;
            cin >> q[i].x >> q[i].y;
            q[i].id = cntQ;
            q[i].t = cntU;
// right
cntQ ++;
            cin >> q[cntQ].x >> q[cntQ].y;
            q[cntQ].id = cntQ;
            q[cntQ].t = cntU;
  1. 修改函数的是不是把询问编号当成了修改位置?
// wrong
del (a[x]);
...
swap (u[t].y, a[x]);
// right
del (a[u[t].x]);
...
swap (u[t].y, a[u[t].x]);
  1. 分块不要用 n\sqrt {n},要用 n23n^{\frac{2}{3}}。

  2. 修改函数判断的区间范围有没有写错?

欢迎补充。

2024/8/7 14:38
加载中...