关于 ABC F题 TLE,玄关
  • 板块学术版
  • 楼主Star_F
  • 当前回复10
  • 已保存回复10
  • 发布时间2025/8/30 22:02
  • 上次更新2025/8/31 15:44:32
查看原帖
关于 ABC F题 TLE,玄关
1014580
Star_F楼主2025/8/30 22:02

我这份代码TLE了6个测试点,但这份代码的时间复杂度应该是 O(Q)O(Q) 的吧,因为每个数最多被删一次(就是代码中的 vis 数组最多标记一次),但不知为何TLE,向各位大佬求问。玄一关

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 10;
int pre[N], nxt[N], ord[N];
bool vis[N];  
bool check(int a, int b) {
    int c = a;
    while (c != -1 && vis[c]) {
        if (c == b) return 1;
        c = nxt[c];
    }
    return 0;
}
int main(){
    ios::sync_with_stdio(false);
    int Q;
    cin>>Q;
    memset(pre, -1, sizeof(pre));
    memset(nxt, -1, sizeof(nxt));
    vis[0] = 1;
    //ord[0] = 0;
    for (int i = 1; i <= Q; ++i) {
        int t;
        cin>>t;
        if (t == 1) {
            int x; cin>>x;
            int nx = nxt[x];
            nxt[x] = i, pre[i] = x, nxt[i] = nx;
            if (nx != -1) pre[nx] = i;  
            vis[i] = 1;
            //ord[i] = ord[x] + 1;
        } else {
            int x,y; cin>>x>>y;
            int a = x, b = y;
            if (!check(a,b)) swap(a, b);
            long long sum = 0;
            int c = nxt[a];
            while (c != b && vis[c]) {
                sum += c;
                vis[c] = 0;
                c = nxt[c];
            }
            nxt[a] = b, pre[b] = a;
            cout<<sum<<endl;
        }
    }
    return 0;
}

2025/8/30 22:02
加载中...