求助,为啥评测机上运行错误
查看原帖
求助,为啥评测机上运行错误
700250
AMCakACM楼主2022/12/6 10:38

连8pts都没

#include<bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=2.5*(1e5+10);
template<typename T>void read(T &x)
{
	x=0;char c=getchar();T neg=0;
	while(!isdigit(c))neg|=!(c^'-'),c=getchar();
	while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
	if(neg)x=(~x)+1;
}
template<typename T>void wr(T x)
{
	if(x<0)putchar('-'),x=-x;
	if(x>9)wr(x/10);
	putchar((x-x/10*10)^48);
	return ;
}
ull n,id,q;
ull maxx1[N][23],maxx2[N][23],anss[6010][6010],anss2[6010][6010];
void ycl()
{
	for(int j=1;j<=20;++j)
	for(int i=1;1ull*(i+(1ull<<(j-1)))<=n;++i)
	{
		maxx1[i][j]=max(maxx1[i+(1ull<<(j-1))][j-1],maxx1[i][j-1]);
		maxx2[i][j]=max(maxx2[i+(1ull<<(j-1))][j-1],maxx2[i][j-1]);
	}
}
int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	read(id),read(n);
	for(ull i=1;i<=n;++i)read(maxx1[i][0]);
	for(ull i=1;i<=n;++i)read(maxx2[i][0]);
	ycl();
	read(q);
	for(ull i=1;i<=q;++i)
	{
		ull l,r;
		read(l),read(r);
		ull ans=0;
		//ans=anss2[l][r];
		for(ull j=l;j<=r;++j)
		{
			for(ull k=j;k<=r;++k)
			{
				if(anss[j][k]){
					ans+=anss[j][k];
					continue;
				}
				ull k3=log(k-j+1)/log(2);
			
				ull ma1=max(maxx1[j][k3],maxx1[k-(1ull<<(k3))+1][k3]);
				ull ma2=max(maxx2[j][k3],maxx2[k-(1ull<<(k3))+1][k3]);
				anss[j][k]=ma1*ma2;
				//printf("l=%d r=%d k3=%d\n",j,k,k3);
				//wr(ma1),putchar(' '),wr(ma2),putchar('\n');
				ans+=ma1*ma2;
			}
		}
		wr(ans),putchar('\n');
	}
	
	return 0;
}
/*
0 2
2 1
1 2
1
1 2
*/

2022/12/6 10:38
加载中...