蒟蒻RE求助
查看原帖
蒟蒻RE求助
241102
ThisIsAName楼主2020/5/4 15:12

感谢你能点进来

本蒟蒻初学莫队 看了好久也不知道为什么RE 大概一定是我太菜了

这是反馈信息:runtime error (SIGSEGV)

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define rg register
#define il inline
#define MAXN 30010
#define SQRTN 180
#define MAXM 200010
#define MAXX 1000010
using namespace std;

il void init(int &x)
{
	x = 0;
	char c = getchar();
	while(c>'9' || c<'0')	c = getchar();
	while(c>='0' && c<='9')
	{
		x = (x<<1) + (x<<3) + (c^48);
		c = getchar();
	}
}

//int n, m, rtn, a[MAXN], pos[SQRTN], ans[MAXM], ctr[MAXX], now, nl=0, nr=0;
int n, m, rtn, a[MAXX], pos[MAXX], ans[MAXX], ctr[MAXX], now, nl=0, nr=0;	//开最大了然而还是RE

struct question{
	int l, r, id;
}q[MAXN];

il bool cmp(question a, question b)
{
	return pos[a.l]^pos[b.l] ? pos[a.l]<pos[b.l] : (pos[a.l]&1 ? a.r<b.r : a.r>b.r);
}

il void del(int x)
{
	--ctr[a[x]];
	if(!ctr[a[x]])	--now;
}

il void add(int x)
{
	if(!ctr[a[x]])	++now;
	++ctr[a[x]];
}

int main()
{
	init(n);
	rtn = sqrt(n);
	for(rg int i=1, top=(n+rtn-1)/rtn ; i<=top ; i++)
		for(rg int j=(i-1)*rtn+1 ; j<=rtn*i ; j++)
			pos[j] = i;
	for(rg int i=1 ; i<=n ; i++)
		init(a[i]);
		
	init(m);
	for(rg int i=1 ; i<=m ; i++)
	{
		init(q[i].l);
		init(q[i].r);
		q[i].id = i;
	}
	
	sort(q+1, q+m+1, cmp);
	
	for(rg int i=1 ; i<=m ; i++)
	{
		int qr = q[i].r, ql = q[i].l;
		while(nr < qr)	add(++nr);
		while(nr > qr)	del(nr--);
		while(nl < ql)	del(nl++);
		while(nl > ql)	add(--nl);
		ans[q[i].id] = now;
	}
	
	for(rg int i=1 ; i<=m ; i++)
		printf("%d\n", ans[i]);
	
	return 0;
}

谢谢各位dalao能看到这里 本蒟蒻先orz为敬

2020/5/4 15:12
加载中...