QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#360179#3300. Cactus CompetitionttestWA 4ms133776kbC++143.6kb2024-03-21 14:32:412024-03-21 14:32:42

Judging History

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

  • [2024-03-21 14:32:42]
  • 评测
  • 测评结果:WA
  • 用时:4ms
  • 内存:133776kb
  • [2024-03-21 14:32:41]
  • 提交

answer

#include<bits/stdc++.h>

#define ll long long

#define int long long

#define fir first

#define sec second

#define pii pair<int,int>

#define isz(v) (int)(v.size())

using namespace std;



const int maxn=200005;

const int logn=19;

const int inf=0x3f3f3f3f;



namespace Solve {

	struct ST {

		int a[maxn];

		int lg[maxn];

		int mi[logn][maxn];

		int mx[logn][maxn];

		void build(int n,int *v) {

			// cerr<<"build: "<<n<<" ";

			for(int i=1;i<=n;i++) {

				// cerr<<v[i]<<"? ";

				a[i]=v[i];

				mi[0][i]=a[i];

				mx[0][i]=a[i];

			}

			// cerr<<"\n";

			for(int i=2;i<=n;i++) {

				lg[i]=lg[i>>1]+1;

			}

			for(int i=1;(1<<i)<=n;i++) {

				for(int j=1;j+(1<<i)-1<=n;j++) {

					mi[i][j]=min(mi[i-1][j],mi[i-1][j+(1<<(i-1))]);

					mx[i][j]=max(mx[i-1][j],mx[i-1][j+(1<<(i-1))]);

				}

			}

			// cerr<<"build done\n";

		}

		int getmin(int l,int r) {

			if(l>r) {

				return inf;

			}

			int k=lg[r-l+1];

			return min(mi[k][l],mi[k][r-(1<<k)+1]);

		}

		int getmax(int l,int r) {

			if(l>r) {

				return -inf;

			}

			int k=lg[r-l+1];

			return max(mx[k][l],mx[k][r-(1<<k)+1]);

		}

	};

	int n,m;

	int a[maxn];

	int b[maxn];

	int mib=inf,mxb=-inf;

	bool vl[maxn];

	bool vr[maxn];

	void clear() {

		

	}

	void deal(int *a,int *b,int m,bool *v) {

		// cerr<<"deal: "<<n<<" "<<m<<"\n";

		// for(int i=1;i<=n;i++) {

		// 	cerr<<a[i]<<" ";

		// }

		// cerr<<"\n";

		// for(int i=1;i<=m;i++) {

		// 	cerr<<b[i]<<" ";

		// }

		// cerr<<"\n";

		// cerr<<"end\n";

		ST sta,stb;

		sta.build(n,a);

		stb.build(m,b);

		// cerr<<"wtf\n";

		int need[maxn]={};

		auto solve=[&](int l,int r) {

			// cerr<<l<<" "<<r<<"?\n";

			vector<int> st;

			v[r]=true;

			st.push_back(r);

			for(int i=r-1;i>=l;i--) {

				while(isz(st)&&a[st.back()]<a[i]) {

					st.pop_back();

				}

				assert(isz(st));

				int mi=sta.getmin(i,st.back()-1);

				need[i]=-mi;



				int t=1;

				while(t<=m&&b[t]+a[i]>=0) {

					t++;

				}

				t--;

				v[i]=v[st.back()]&&stb.getmax(1,t)>=need[st.back()];



				st.push_back(i);

			}

		};

		for(int i=n;i>=1;i--) {

			if(a[i]+mib>=0) {

				int j=i-1;

				while(j>=1&&a[j]+mib<0) {

					j--;

				}

				j++;

				solve(j,i);

				i=j;

			}

		}

	}

	void main(int tid) {

		cin>>n>>m;

		for(int i=1;i<=n;i++) {

			cin>>a[i];

		}

		for(int i=1;i<=m;i++) {

			cin>>b[i];

			mib=min(mib,b[i]);

			mxb=max(mxb,b[i]);

		}

		int t[maxn]={},cnt=0;

		for(int i=1;i<=m;i++) {

			t[++cnt]=b[i];

			if(b[i]==mxb) {

				break;

			}

		}

		deal(a,t,cnt,vl);

		reverse(a+1,a+n+1);

		cnt=0;

		for(int i=m;i>=1;i--) {

			t[++cnt]=b[i];

			if(b[i]==mxb) {

				break;

			}

		}

		deal(a,t,cnt,vr);

		reverse(a+1,a+n+1);

		reverse(vr+1,vr+n+1);

		int ans=0;

		for(int i=1;i<=n;i++) {

			for(int j=i;j<=n;j++) {

				if(a[j]+mxb<0) {

					break;

				}

				ans+=vl[i]&&vr[j];

			}

		}

		cout<<ans<<"\n";

	}

	void init() {

		

	}

}



signed main() {

#ifndef ONLINE_JUDGE

	freopen("data.in","r",stdin);

	freopen("data.out","w",stdout);

#endif

	ios::sync_with_stdio(false);

	cin.tie(0),cout.tie(0);

	int T=1;

//	cin>>T;

	Solve::init();

	for(int t=1;t<=T;t++) {

		Solve::main(t);

		Solve::clear();

	}

#ifndef ONLINE_JUDGE

	cerr<<"Time: "<<(1.0*clock()/CLOCKS_PER_SEC)*1000<<"ms\n";

#endif

}


Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 133768kb

input:

3 3
-1 0 1
-1 0 1

output:

1

result:

ok single line: '1'

Test #2:

score: 0
Accepted
time: 4ms
memory: 131724kb

input:

3 3
-1 0 1
1 0 1

output:

5

result:

ok single line: '5'

Test #3:

score: 0
Accepted
time: 4ms
memory: 133764kb

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: 0ms
memory: 133776kb

input:

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

output:

31

result:

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