题目其实很简单,就是双链表的增删查,但是刚开始,直接vis标记删除元素,查找一个位置的前一个用的while不断向前找,但是TLE;毕竟O(n*k)的复杂度,一开始没有考虑时间复杂度,说明只能O(n)线性来解决,刚开始模拟单链表,没用next后继,只用了前驱,有点bug,WA了好几下,后来浩提供的用双链表才过了;注意更新双链表,先更新后继,在更新前驱;
#include <bits/stdc++.h>using namespace std;
typedef long long LL;int n, k;
int pre[1000010];
int ne[1000010];int main() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin >> n >> k;for (int i = 1; i <= n; ++i) {pre[i] = i - 1;ne[i] = i + 1;}while (k--) {int op, x;cin >> op >> x;if (op == 1) {//删除x//更新x的前一个元素的后继ne[pre[x]] = ne[x];//更新x的后一个元素的前驱pre[ne[x]] = pre[x];} else {cout << pre[x] << endl;}}return 0;
}
本文发布于:2024-02-05 02:11:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170721680262075.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |