50pts tle求助
查看原帖
50pts tle求助
762199
fulichang楼主2023/8/28 22:40
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 5;
int c, q, op, x, idx = 1;
long long cnt, sta = 1;

struct num {
	int len, start, end;
	bool st;
} a[N];

void add(int n) {
	a[idx].start = 1, a[idx].end = n, a[idx].len = n;
	a[idx].st = true; //还在队列
	idx++;
	cnt += n;
}

void del(int n) {
	for (int i = sta; i < idx; i++) {
		if (a[i].len <= n ) {
			a[i].st = false;
			sta++;
			n -= a[i].len;
		} else {
			a[i].start += n;
			a[i].len -= n;
			n -= n;
		}
		if (n <= 0)
			break;
	}

}

void findn(int n) {

	for (int i = sta; i < idx; i++) {
		if (a[i].len < n ) {
			n -= a[i].len;
		} else {
			printf("%d\n", a[i].start + n - 1);
			n -= n;
		}
		if (n <= 0)
			break;
	}
}

void maxx() {
	long long  maxn = 0;
	for (int i = sta; i < idx; i++)
		if (a[i].st && a[i].end > maxn)
			maxn = a[i].end;
	printf("%d\n", maxn);
}

int main() {
	//freopen("queue5.in", "r", stdin);
	scanf("%d%d", &c, &q);
	while (q--) {
		scanf("%d", &op);
		if (op == 1) {
			scanf("%d", &x);
			add(x);
		}
		else if (op == 2) {
			scanf("%d", &x);
			del(x);
		}
		else if (op == 3) {
			scanf("%d", &x);
			findn(x);
		} else
			maxx();
	}
	return 0;
}
2023/8/28 22:40
加载中...