求助,不明原因MLE。
查看原帖
求助,不明原因MLE。
265453
strange757楼主2022/7/15 21:14

可能是数据生成器产生负数了,求查错。

#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
typedef unsigned int ui ;
const int N = 1e6 + 5;
int t ,n, rt, vis[N];
ui seed, last = 7, m;
int val[N], rnd[N], sz[N], ls[N], rs[N];
ui randNum( ui& seed , ui last , const ui m){ 
    seed = seed * 17 + last ; return seed % m + 1; 
}
void pushup(int x){
    sz[x] = sz[ls[x]] + sz[rs[x]] + 1;
}
int merge(int x, int y){
    if(!x||!y) return x|y;
    if(rnd[x] < rnd[y]){
        rs[x] = merge(rs[x], y);
        pushup(x);
        return x;
    }else{
        ls[y] = merge(x, ls[y]);
        pushup(y);
        return y;
    }
}
pair<int, int> split(int x, int v){
    if(!x) return {0, 0};
    if(val[x] > v){
        auto p = split(ls[x], v);
        ls[x] = p.second;
        pushup(x);
        return {p.first, x};
    }else{
        auto p = split(rs[x], v);
        rs[x] = p.first;
        pushup(x);
        return {x, p.second};
    }
}
void insert(int v, int x){
    auto p = split(rt, v);
    rt = merge(p.first, merge(x, p.second));
}
void del(int v){
    auto p = split(rt, v), q = split(p.first, v - 1);
    q.second = merge(ls[q.second], rs[q.second]);
    rt = merge(q.first, merge(q.second, p.second));
}
int Rank(int v){
    auto p = split(rt, v - 1);
    int res = sz[p.first] + 1;
    rt = merge(p.first, p.second);
    return res;
}
signed main(){
    scanf("%lld", &t);
    while(t--){
        scanf("%lld%lld%lld", &m, &n, &seed);
        int now  = 0;
        rt = 0;
        for(int i = 1; i <= n; i++){
            int x = randNum(seed, last, m);
            int w = randNum(seed, last, m);
            if(!vis[x]) vis[x] = 1, now++, rnd[x] = rand(), sz[x] = 1, ls[x] = rs[x] = 0;
            del(val[x]);
            val[x] = val[x] + 1e7 - w, sz[x] = 1;
            ls[x] = 0, rs[x] = 0, rnd[x] = rand();
            insert(val[x], x);
            last = now - Rank(val[x]);
            cout << x << "     " << w << endl;
            printf("%lld\n", last);
        }
    }
    return 0;
}
2022/7/15 21:14
加载中...