QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#357749#3300. Cactus CompetitionwdnmdwrnmmpWA 1ms9764kbC++141.9kb2024-03-19 10:39:552024-04-09 18:18:25

Judging History

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

  • [2024-04-09 18:18:25]
  • 管理员手动重测该提交记录
  • 测评结果:WA
  • 用时:1ms
  • 内存:9764kb
  • [2024-03-19 10:39:55]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
// #define int long long
#define rep(i,j,k) for(int i=(j);i<=(k);i++)
#define per(i,j,k) for(int i=(j);i>=(k);i--)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
typedef vector<int> vi;
typedef pair<int,int> pi;

const int N=2e5+5,inf=1e9+5;
int n,m,a[N],b[N];
int pmn[N],pmx[N],smn[N],smx[N];
int mx0[N],mx1[N];
int s[N][2];
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	
	cin>>n>>m;
	rep(i,1,n){
		cin>>a[i];
	}
	rep(i,1,m){
		cin>>b[i];
	}
	rep(i,1,m){
		pmn[i]=pmx[i]=b[i];
		if(i>=2){
			pmn[i]=min(pmn[i],pmn[i-1]);
			pmx[i]=max(pmx[i],pmx[i-1]);
		}
	}
	per(i,m,1){
		smn[i]=smx[i]=b[i];
		if(i<=n-1){
			smn[i]=min(smn[i],smn[i+1]);
			smx[i]=max(smx[i],smx[i+1]);
		}
	}
	// rep(i,1,m){
		// cout<<pmn[i]<<' ';
	// }
	// cout<<'\n';
	rep(i,1,n){
		int p=upper_bound(pmn+1,pmn+m+1,-a[i],greater<int>())-pmn;
		mx0[i]=(p==0? -inf: pmx[p-1]);
		int q=lower_bound(smn+1,smn+m+1,-a[i])-smn;
		mx1[i]=(q>m? -inf: smx[q]);
	}
	int mn=*min_element(b+1,b+m+1);
	
	vi stk;
	rep(i,1,n){
		int ls=0;
		while(!stk.empty() && a[stk.back()]<=a[i]){
			ls=stk.back();
			stk.pop_back();
		}
		if(!stk.empty()){
			s[stk.back()][1]=i;
		}
		s[i][0]=ls;
		stk.pb(i);
	}
	long long ans=0;
	auto dfs=[&](auto self,int u,int L,int R)->void{
		if(!u){
			return;
		}
		if(mn+a[u]<0){
			return;
		}
		int le=1,ri=1;
		int mnl=a[u],mnr=a[u];
		per(i,u-1,L){
			mnl=min(mnl,a[i]);
			int mx=mx0[i];
			if(mx+mnl>=0){
				le++;
				mnl=a[u];
			}
		}
		rep(i,u+1,R){
			mnr=min(mnr,a[i]);
			int mx=mx1[i];
			if(mx+mnr>=0){
				ri++;
				mnr=a[u];
			}
		}
		ans+=(long long)le*ri;
		self(self,s[u][0],L,u-1);
		self(self,s[u][1],u+1,R);
	};
	// cout<<"?"<<stk[0]<<' '<<a[stk[0]]<<endl;
	dfs(dfs,stk[0],1,n);
	cout<<ans<<'\n';
}

詳細信息

Test #1:

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

input:

3 3
-1 0 1
-1 0 1

output:

2

result:

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