QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#357752 | #3300. Cactus Competition | wdnmdwrnmmp | WA | 0ms | 9668kb | C++14 | 1.8kb | 2024-03-19 10:40:17 | 2024-03-19 10:40:17 |
Judging History
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,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);
};
dfs(dfs,stk[0],1,n);
cout<<ans<<'\n';
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 9668kb
input:
3 3 -1 0 1 -1 0 1
output:
2
result:
wrong answer 1st lines differ - expected: '1', found: '2'