桶排序,前面十个点都过了,最后一个点过不去,能优化吗?
查看原帖
桶排序,前面十个点都过了,最后一个点过不去,能优化吗?
186472
AC_loveRealNewbie楼主2023/7/26 00:12

蒟蒻不会线段树,写了个桶排序,开了氧气,居然把前面十个点全过了。

如果是正式比赛里,这100分就让我水到了(大喜),但是洛谷不知为何加了一个subtask(恼),这个新增的数据点导致我这个代码虽然是100分但是还是处在unaccepted的状态。

优化的时候我把cin都换成了scanf,但是好像并没有什么作用,前面的点依然都是AC,最后的subtask还是T了。

所以这个代码有办法优化吗?能不能让它跑得更快一点,能顺利蒙混过关?

#include <bits/stdc++.h>
using namespace std;
int n, m;
int q[100100];
int op;
int beg, fin;
bool cmp(int a, int b)
{
	return a > b;
}
int w;
int tong[100100];

int main()
{
	scanf("%d %d", &n, &m);
	for(int i = 1; i <= n; i = i + 1)
		scanf("%d", &q[i]);
	for(int i = 1; i <= m; i = i + 1)
	{
	    scanf("%d %d %d", &op, &beg, &fin);
		for(int j = beg; j <= fin; j = j + 1)
			tong[q[j]] = true;
		int k = 1;
		if(op == 0)
		{
			for(int j = beg; j <= fin; j = j + 1)
			{
				while(tong[k] == false)
					k ++;
				q[j] = k;
				tong[k] = false;
				k ++;
			}
		}
		else
		{
			for(int j = fin; j >= beg; j = j - 1)
			{
				while(tong[k] == false)
					k ++;
				q[j] = k;
				tong[k] =false;
				k ++;
			}
		}
	}
	scanf("%d", &w);
	cout << q[w] << endl;
	return 0;
}

顺便问一下诸位大佬是如何看待这种骗分行为的?

2023/7/26 00:12
加载中...