QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#357736#3300. Cactus Competitionjinqihao2023WA 1ms7952kbC++141.8kb2024-03-19 10:16:092024-03-19 10:16:10

Judging History

你现在查看的是最新测评结果

  • [2024-03-19 10:16:10]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:7952kb
  • [2024-03-19 10:16:09]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5,inf=2e9;
typedef long long ll;
int n,m,a[N],b[N],r[N],l[N],minn[N],k,num[N],c[N],minn1[N];
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=m;i++)scanf("%d",&b[i]),b[i]=-b[i]-1;
	for(int i=1;i<=n;i++)c[++c[0]]=a[i];
	for(int i=1;i<=m;i++)c[++c[0]]=b[i];
	sort(c+1,c+c[0]+1),c[0]=unique(c+1,c+c[0]+1)-c-1;
	for(int i=1;i<=n;i++)a[i]=lower_bound(c+1,c+c[0]+1,a[i])-c;
	for(int i=1;i<=m;i++)b[i]=lower_bound(c+1,c+c[0]+1,b[i])-c;
	for(int i=1;i<=n;i++)printf("%d ",a[i]);printf("\n");
	for(int i=1;i<=m;i++)printf("%d ",b[i]);printf("\n");
	minn[0]=inf,k=1;for(int i=1;i<=m;i++)minn[i]=min(minn[i-1],b[i]);
	minn1[m+1]=inf;for(int i=m;i>=1;i--)minn1[i]=min(minn1[i+1],b[i]);
	for(int i=2;i<=m;i++)if(b[i]<b[k])k=i;
	for(int i=1;i<=n;i++)
	{
		int now=0,fl=0;bool flag=0;
		for(int j=i;j<=n;j++)
		{
			while(now<k && a[j]>b[now+1])now++;
			if(now==k){fl=j;break;}
			if(a[j]<=minn[now]){fl=j;flag=1;break;}
		}
		if(flag){i=fl;continue;}
		r[i]=fl;
	}
	for(int i=n;i>=1;i--)
	{
		int now=m+1,fl=0;bool flag=0;
		for(int j=i;j>=1;j--)
		{
			while(now>k && a[j]>b[now-1])now--;
			if(now==k){fl=j;break;}
			if(a[j]<=minn1[now]){fl=j;flag=1;break;}
		}
		if(flag){i=fl;continue;}
		l[i]=fl;
	}
	// for(int i=1;i<=n;i++)printf("%d %d\n",l[i],r[i]);
	vector<int>temp;
	temp.push_back(0);
	for(int i=1;i<=n;i++)if(a[i]<=b[k])temp.push_back(i);
	temp.push_back(n+1);
	int len=temp.size();
	ll ans=0;
	for(int i=0;i<len-1;i++)
	{
		int nl=temp[i]+1,nr=temp[i+1]-1;
		if(nl>nr)continue;
		for(int j=nl;j<=nr;j++)if(l[j]>=nl)num[l[j]]++;
		for(int j=nr-1;j>=nl;j--)num[j]+=num[j+1];
		for(int j=nl;j<=nr;j++)if(r[j]<=nr)ans+=num[r[j]];
	}
	printf("%lld\n",ans);
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 7952kb

input:

3 3
-1 0 1
-1 0 1

output:

2 3 4 
3 2 1 
1

result:

wrong answer 1st lines differ - expected: '1', found: '2 3 4 '