QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#130340#3300. Cactus CompetitionLq67122030WA 3ms14144kbC++143.3kb2023-07-23 21:21:372023-07-23 21:21:41

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-07-23 21:21:41]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:14144kb
  • [2023-07-23 21:21:37]
  • 提交

answer

#include <bits/stdc++.h>
#define il inline
#define LL long long
using namespace std;
template<typename T> il T Max(const T x,const T y) { return x>y?x:y; }
template<typename T> il T Min(const T x,const T y) { return x<y?x:y; }
const int N=2e5+5,inf=1e9+7;
int n,m,a[N],b[N],pmx[N],pmn[N],smx[N],smn[N],cnt;
LL ans;
struct line{
	int l,r,h,num;
	il bool operator < (const line &x)const{
		return h<x.h;
	}
}lin[N*10];
class ST{
	private:
		int f[N][20],lg2[N];
	
	public:
		il void init(int len,int *num){
			lg2[0]=-1;
			for(int i=1;i<=len;++i) f[i][0]=num[i],lg2[i]=lg2[i>>1]+1;
			const int mxn(lg2[n]);
			for(int i=1;i<=mxn;++i)
				for(int j=1;j+(1<<i)-1<=len;++j)
					f[j][i]=Max(f[j][i-1],f[j+(1<<(i-1))][i-1]);
		}
		il int query(int l,int r){
			if(l>r) return -inf;
			int d=lg2[r-l+1];
			return Max(f[l][d],f[r+(1<<d)-1][d]);
		}
}st;
class SGT{
	private:
		LL sum[N<<2],len[N<<2];
		
		#define ls(x) (x<<1)
		#define rs(x) (x<<1|1) 
		
		il void pushup(int x,int l,int r){
			if(sum[x]) len[x]=r-l+1;
			else len[x]=len[ls(x)]+len[rs(x)];
		}
		il void modify(int x,int l,int r,int ll,int rr,int c){
			if(r<ll||rr<l) return;
			if(ll<=l&&r<=rr) return sum[x]+=c,pushup(x,l,r);
			int mid((l+r)>>1) ;
			modify(ls(x),l,mid,ll,rr,c),modify(rs(x),mid+1,r,ll,rr,c);
			pushup(x,l,r);
		}
	
	public:
		il void built() { memset(sum,0,sizeof sum),memset(len,0,sizeof len); }
		il void modify(int l,int r,int c) { modify(1,1,n,l,r,c); }
		il LL al() { return len[1]; }
}T;
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);
	st.init(n,a);
	pmx[0]=smx[0]=-inf,pmn[m+1]=smn[m+1]=inf;
	for(int i=1;i<=m;++i) pmn[i]=Min(pmn[i-1],b[i]),pmx[i]=Max(pmx[i-1],b[i]);
	for(int i=m;i;--i) smn[i]=Min(smn[i+1],b[i]),smx[i]=Max(smx[i+1],b[i]);
	const int mxb(pmx[m]);
	for(int i=1;i<=n;++i) if(a[i]+mxb<0)
		lin[++cnt]=(line){1,i,i,1},lin[++cnt]=(line){1,i,n+1,-1};
	const int mnb(pmn[m]);
	for(int i=1,l=0;i<=n;++i){
		if(a[i]+mnb>=0){
			if(l) lin[++cnt]=(line){l,i-1,l,1},lin[++cnt]=(line){l,i-1,i,-1},l=0;
		}else if(!l) l=i;
	}
	for(int i=1;i<=n;++i){
		int l(1),r(m),ans(0),t;
		while(l<=r){
			int mid((l+r)>>1);
			if(pmx[mid]+a[i]<0) l=mid+1,ans=mid;
			else r=mid-1;
		} 
		if(!ans) continue;
		l=1,r=i,t=i;
		while(l<=r){
			int mid((l+r)>>1);
			if(pmn[ans]+st.query(mid,i)<0) r=mid-1,t=mid;
			else l=mid+1;
		}
		lin[++cnt]=(line){t,i,t,1},lin[++cnt]=(line){t,i,n+1,-1};
//		printf("%d %d\n",i,ans);
	}
//	puts("");
	for(int i=1;i<=n;++i){
		int l(1),r(m),ans(m+1),t;
		while(l<=r){
			int mid((l+r)>>1);
			if(smx[mid]+a[i]<0) r=mid-1,ans=mid;
			else l=mid+1;
		} 
		if(ans>m) continue;
		l=i,r=n,t=i;
		while(l<=r){
			int mid((l+r)>>1);
			if(smn[ans]+st.query(i,mid)<0) l=mid+1,t=mid;
			else r=mid-1;
		}
		lin[++cnt]=(line){1,t,i,1},lin[++cnt]=(line){1,t,t+1,-1};
//		printf("%d %d\n",i,ans);
	}
//	puts("");
	for(int i=1;i<=n;++i) lin[++cnt]=(line){i,i,1,1},lin[++cnt]=(line){i,i,i,-1};
	sort(lin+1,lin+cnt+1);
	for(int i=1;i<cnt;++i){
		T.modify(lin[i].l,lin[i].r,lin[i].num);
		ans+=T.al()*(lin[i+1].h-lin[i].h);
	}
//	for(int i=1;i<=cnt;++i) printf("%d %d %d %d\n",lin[i].l,lin[i].r,lin[i].h,lin[i].num);
	printf("%lld",1ll*n*n-ans);
	return 0;
}
/*
3 3
-1 0 1
1 0 1

*/

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 13852kb

input:

3 3
-1 0 1
-1 0 1

output:

1

result:

ok single line: '1'

Test #2:

score: 0
Accepted
time: 3ms
memory: 13848kb

input:

3 3
-1 0 1
1 0 1

output:

5

result:

ok single line: '5'

Test #3:

score: 0
Accepted
time: 1ms
memory: 14144kb

input:

10 10
145195799 312862766 143966779 -11056226 -503624929 636383890 -182650312 -382759112 -290767690 377894950
-845235881 -418232930 -600566938 -957917357 -181139226 125255273 -175406945 740226783 -750456842 325848662

output:

0

result:

ok single line: '0'

Test #4:

score: -100
Wrong Answer
time: 3ms
memory: 13852kb

input:

10 10
923415743 -503391272 885740174 329644337 -693052351 -53764994 731859967 -834732760 -57751504 151969590
553689579 313784278 -12090771 921222379 -378313551 819586787 -373658045 559813071 671861309 268258615

output:

7

result:

wrong answer 1st lines differ - expected: '13', found: '7'