SP32900 RE求助
  • 板块题目总版
  • 楼主T20201126
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/8/15 20:58
  • 上次更新2023/10/27 15:14:53
查看原帖
SP32900 RE求助
419474
T20201126楼主2022/8/15 20:58

显示是 SIGSEGV

不知道为什么

(N为200005也是RE)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=500005;

ll n,m,l,r,a[N],pos[N],ans[N],num1[N],num2[N],cnt,res;

struct node{
	ll l,r,k,ID;
	inline bool operator < (const node &b)const{
		if(pos[l]!=pos[b.l]) return l<b.l;
		if(pos[l]&1) return r<b.r;
			else return r>b.r;
	}
}xu[N];
inline ll read()
{
	ll x=0;int b=1;char c=getchar();
	while(!isdigit(c)){
		if(c=='-') b=-1;
		c=getchar();
	}
	while(isdigit(c)){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*b;
}
void add(ll w)
{
	++num1[a[w]];
	--num2[num1[a[w]]-1];
	++num2[num1[a[w]]];
	res=max(res,num1[a[w]]);
	return ;
}
void sub(ll w)
{
	--num1[a[w]];
	++num2[num1[a[w]]];
	--num2[num1[a[w]]+1];
	if(num2[res]==0)
		res--;
	return ;
}
int main()
{
	n=read();m=read();cnt=sqrt(n);
	for(int i=1;i<=n;++i){
		a[i]=read();
		pos[i]=(i-1)/cnt+1;
	}
	for(int i=1;i<=m;++i)
	{
		xu[i].l=read();	xu[i].r=read();
		xu[i].k=read(); xu[i].ID=i;
	}
	sort(xu+1,xu+1+m);
	l=1;r=0;res=0;
	for(int i=1;i<=m;++i)
	{
		while(xu[i].l<l) add(--l);
		while(xu[i].r>r) add(++r);
		while(xu[i].l>l) sub(l++);
		while(xu[i].r<r) sub(r--);
		ans[xu[i].ID]=(res*xu[i].k>=xu[i].r-xu[i].l+1);
 	}
 	for(int i=1;i<=m;++i)
 		ans[i]==1?printf("YES\n"):printf("NO\n");
 	return 0;
 } 
2022/8/15 20:58
加载中...