运算符重载神秘常数(?

P4148 简单题

HRcohc @ 2024-05-29 19:46:51

针对 nth_element 函数,如果用被注释掉的运算符重载就会 TLE20pts,用结构体下面的比较函数就可以 AC

怎么会是呢,有没有大佬救一救 QAQ

int cur;
struct Node{
    int x[K];
    int val, sum, lc, rc;
    int mn[K], mx[K];
//  bool operator > (const Node &y)const{
//      return x[cur] < y.x[cur];
//  }
}l, h, t[N];
bool cmp(int x, int y){return t[x].x[cur] < t[y].x[cur];}
```cpp int build(int l, int r, int d = 0){ cur = d; int mid = (l + r) >> 1; nth_element(id + l, id + mid, id + r + 1, cmp); int now = id[mid]; if(l < mid) t[now].lc = build(l, mid - 1, d ^ 1); if(mid < r) t[now].rc = build(mid + 1, r, d ^ 1); pushup(now); return now; } ```

by ScaredQiu @ 2024-05-29 19:52:36

@HRcohc 你重载运算符和 cmp 写的不一样,当然会 T 了。


by HRcohc @ 2024-05-29 19:55:40

@ScaredQiu 哦哦我 build 里的序列用的是 id,应该用 t 比较/bx/bx


|