WA+RE 求助
查看原帖
WA+RE 求助
549499
Disjoint_cat楼主2023/1/29 21:25

WA #3 #4,其余 RE。

#include<bits/stdc++.h>
#define ll long long
#define YJL_DRC_LCH_WJY_WQY_ZZH using
#define AK namespace
#define IOI std
YJL_DRC_LCH_WJY_WQY_ZZH AK IOI;
void Init()
{

}
const int N=100005,M=33334,P=M+10,K=180;
int n,m,a[N],Ans[P],I=1,tot,cnt[N];
struct Q
{
	int l,r,id;
}q[P*3];
bool cmpl(Q A,Q B){return A.l<B.l;}
bool cmpr(Q A,Q B){return A.r<B.r;}
bool cmpi(Q A,Q B){return A.id<B.id;}
bitset<N>ans[P],tmp;
int L,R;
void Add(int pos){tmp[cnt[a[pos]]++]=1;}
void Del(int pos){tmp[--cnt[a[pos]]]=0;}
void sol()
{
	for(tot=1;tot<=M&&I<=m;tot++,I++)
	{
		for(int j=tot*3-2;j<=tot*3;j++)
		{
			cin>>q[j].l>>q[j].r;
			q[j].id=tot;
			Ans[tot]+=q[j].r-q[j].l+1;
		}
	}
	tot--;
	for(int i=1;i<=tot;i++)ans[i].set();
	int Cnt=tot*3;
	tmp.reset();
	sort(q+1,q+Cnt+1,cmpl);
	for(int i=1,j=K;i<=Cnt;i+=K,j+=K)sort(q+i,q+min(j,Cnt)+1,cmpr);
	L=1,R=0;
	for(int i=1;i<=Cnt;i++)
	{
		while(L>q[i].l)Add(--L);
		while(R<q[i].r)Add(++R);
		while(L<q[i].l)Del(L++);
		while(R>q[i].r)Del(R--);
		ans[q[i].id]&=tmp;
	}
	for(int i=L;i<=R;i++)Del(i);
	for(int i=1;i<=tot;i++)
		cout<<Ans[i]-3*ans[i].count()<<endl;
}
map<int,int>lsh;
void Solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++){cin>>a[i];lsh[a[i]]++;}
	int Cnt=1;
	for(map<int,int>::iterator It=lsh.begin();It!=lsh.end();It++)
	{
		It->second=Cnt;
		Cnt+=It->second;
	}
	for(int i=1;i<=n;i++)a[i]=lsh[a[i]];
	for(int i=1;i<=n;i++)cnt[i]=i;
	for(int i=1;i<=3;i++)sol();
}
void QingKong()
{

}
int main()
{
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int T=1;
	//cin>>T;
	Init();
	while(T--)
	//while(cin>>n&&n)
	//while(cin>>n)
	{
		Solve();
		QingKong();//多测不清空,抱灵两行泪
	}
	return 0;
}
2023/1/29 21:25
加载中...