QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#357733 | #3300. Cactus Competition | D_F_S | WA | 3ms | 24232kb | C++14 | 2.3kb | 2024-03-19 10:11:14 | 2024-03-19 10:11:14 |
Judging History
answer
#include<bits/stdc++.h>
#define inl inline
using namespace std;
const int N=2e5+5,V=1e9+1,IB=1<<21; char IN[IB],*IS=IN+IB,*IT=IS;
#define getchar() (IS==IT&&(fread(IS=IN,1,IB,stdin)),*IS++)
struct D {int lx,rx,ly,ry; }d[N*5];
struct C {int l,r,v; }; vector<C> c[N];
struct TR {int v,c,t; }tr[N*4];
int n,m,dc,ab=-V,ib=V,id,a[N],b[N],sb[N],bi[N],sa[18][N]; long long an;
inl int Read()
{
int s=0,f=1; char c; while(!isdigit(c=getchar())) c=='-'&&(f=-1);
for(;isdigit(c);c=getchar()) s=s*10+c-'0'; return s*f;
}
inl int Ask(int l,int r) {int k=__lg(r-l+1); return max(sa[k][l],sa[k][r-(1<<k)+1]); }
#define L (p<<1)
#define R (L|1)
#define md ((l+r)>>1)
inl void PU(int p)
{
TR &t=tr[p],l=tr[L],r=tr[R]; t.c=(l.v<=r.v)*l.c+(r.v<=l.v)*r.c; t.v=min(l.v,r.v)+t.t;
}
inl void BD(int p,int l,int r) {tr[p]={0,r-l+1}; l<r&&(BD(L,l,md),BD(R,md+1,r),0); }
inl void MD(int p,int l,int r,int la,int ra,int t)
{
if(l>ra||r<la) return; if(l>=la&&r<=ra) return tr[p].v+=t, tr[p].t+=t, void();
MD(L,l,md,la,ra,t); MD(R,md+1,r,la,ra,t); PU(p);
}
int main()
{
n=Read(); m=Read(); for(int i=2;i<=n;++i) d[++dc]={i,i,1,i-1};
for(int i=1;i<=n;++i) sa[0][i]=a[i]=Read();
for(int i=1;i<=m;++i) ab=max(ab,b[i]=Read()), b[i]<ib&&(ib=b[id=i]);
for(int i=1;i<=n;++i) a[i]+ab<0&&(d[++dc]={1,i,i,n},0);
for(int l=1,r;l<=n;l=r+1) if(b[id]+a[l]>=0) r=l;
else {for(r=l;r<=n&&b[id]+a[r+1]<0;++r); d[++dc]={l,r,l,r}; }
for(int i=1;i<18;++i) for(int j=1;j<=n-(1<<i)+1;++j) sa[i][j]=max(sa[i-1][j],sa[i-1][j+(1<<(i-1))]);
sb[0]=-V; for(int i=1,t=V,j=0;i<=m;++i) sb[i]=max(sb[i-1],b[i]), b[i]<V&&(j=i), bi[i]=j;
for(int i=1;i<=n;++i)
{
int j=0,k=0,l,r; for(l=1,r=m;l<=r;) a[i]+sb[md]<0?(j=md,l=md+1):r=md-1;
if(!j) continue; j=bi[j]; for(l=1,r=i;l<=r;) b[j]+Ask(md,i)<0?(k=md,r=md-1):l=md+1;
d[++dc]={k,i,1,n};
}
sb[m+1]=-V; for(int i=m,t=V,j=0;i;--i) sb[i]=max(sb[i+1],b[i]), b[i]<V&&(j=i), bi[i]=j;
for(int i=1;i<=n;++i)
{
int j=0,k=0,l,r; for(l=1,r=m;l<=r;) a[i]+sb[md]<0?(j=md,r=md-1):l=md+1;
if(!j) continue; j=bi[j]; for(l=i,r=n;l<=r;) b[j]+Ask(i,md)<0?(k=md,l=md+1):r=md-1;
d[++dc]={i,k,1,n};
}
for(int i=1,l,r;i<=dc;++i)
c[d[i].lx].push_back({l=d[i].ly,r=d[i].ry,1}), c[d[i].rx+1].push_back({l,r,-1});
BD(1,1,n); for(int i=1;i<=n;an+=(!tr[1].v)*tr[1].c,++i) for(C u:c[i]) MD(1,1,n,u.l,u.r,u.v);
printf("%lld\n",an); return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 16004kb
input:
3 3 -1 0 1 -1 0 1
output:
1
result:
ok single line: '1'
Test #2:
score: 0
Accepted
time: 3ms
memory: 22204kb
input:
3 3 -1 0 1 1 0 1
output:
5
result:
ok single line: '5'
Test #3:
score: 0
Accepted
time: 3ms
memory: 20072kb
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: 24232kb
input:
10 10 923415743 -503391272 885740174 329644337 -693052351 -53764994 731859967 -834732760 -57751504 151969590 553689579 313784278 -12090771 921222379 -378313551 819586787 -373658045 559813071 671861309 268258615
output:
26
result:
wrong answer 1st lines differ - expected: '13', found: '26'