QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#657097#2788. HorsesPioneer#17 364ms46628kbC++202.7kb2024-10-19 14:12:022024-10-19 14:12:12

Judging History

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

  • [2024-10-19 14:12:12]
  • 评测
  • 测评结果:17
  • 用时:364ms
  • 内存:46628kb
  • [2024-10-19 14:12:02]
  • 提交

answer

#include "horses.h"
#include <bits/stdc++.h>

#define ll long long
using namespace std;

const ll inf=1e9;
const int mod=1e9+7;
const int MAX=5e5+10;

struct segtree{
	int t[4*MAX];
	bool mark[4*MAX];

	void update(int v,int tl,int tr,int pos,int x){
		if(tl==tr){
			t[v]=x;
			return;
		}
		int tm=(tl+tr)/2;
		if(pos<=tm)update(2*v,tl,tm,pos,x);
		else update(2*v+1,tm+1,tr,pos,x);
		if(t[2*v]*1ll*t[2*v+1]>mod){
			mark[v]=1;
		}
		t[v]=(t[2*v]*1ll*t[2*v+1])%mod;
	}

	pair<int,bool> mrg(pair<int,bool> a,pair<int,bool> b){
		pair<int,bool> res={a.first*1ll*b.first%mod,(a.second|b.second)};
		if(a.first*1ll*b.first>mod){
			res.second=1;
		}
		return res;
	}

	pair<int,bool> get(int v,int tl,int tr,int l,int r){
		if(l>r||tl>r||l>tr)return {1,0};
		if(l<=tl&&tr<=r)return {t[v],mark[v]};
		int tm=(tl+tr)/2;
		return mrg(get(2*v,tl,tm,l,r),get(2*v+1,tm+1,tr,l,r));
	}
}tx;

struct segtreeMx{
	pair<int,int> t[MAX];

	pair<int,int> mrg(pair<int,int> a,pair<int,int> b){
		if(a.first>=b.first)return a;
		else return b;
	}

	void update(int v,int tl,int tr,int pos,int x){
		if(tl==tr){
			t[v]={x,tl};
			return;
		}
		int tm=(tl+tr)/2;
		if(pos<=tm)update(2*v,tl,tm,pos,x);
		else update(2*v+1,tm+1,tr,pos,x);
		t[v]=mrg(t[2*v],t[2*v+1]);
	}

	pair<int,int> get(int v,int tl,int tr,int l,int r){
		if(l>r||tl>r||l>tr)return {0,0};
		if(l<=tl&&tr<=r)return t[v];
		int tm=(tl+tr)/2;
		return mrg(get(2*v,tl,tm,l,r),get(2*v+1,tm+1,tr,l,r));
	}
}ty;

int n;
set<int> st;
int x[MAX];
int y[MAX];

int get(int pos){
	return tx.get(1,1,n,1,pos).first*1ll*y[pos]%mod;
}

int get(){
	if(st.empty())return ty.get(1,1,n,1,n).first;
	vector<int> vec;
	int pos=ty.get(1,1,n,*st.rbegin(),n).second;
	// cout<<*st.rbegin()<<" "<<n<<"\n";
	vec.push_back(*st.rbegin());
	st.erase(--st.end());
	while(!st.empty()&&vec.size()<=40){
		int pos1=ty.get(1,1,n,*st.rbegin(),vec.back()-1).second;
		// cerr<<pos<<" "<<pos1<<"\n";
		vec.push_back(*st.rbegin());
		st.erase(--st.end());
		pair<int,bool> bf=tx.get(1,1,n,pos1+1,pos);
		if(bf.second)break;
		if(bf.first*y[pos]<=y[pos1])pos=pos1;
	}
	for(int x:vec)st.insert(x);
	return get(pos);
}

int init(int N, int X[], int Y[]) {
	n=N;
	for(int i=0;i<N;i++){
		y[i+1]=Y[i];
		x[i+1]=X[i];
		tx.update(1,1,N,i+1,X[i]);
		ty.update(1,1,N,i+1,Y[i]);
		if(X[i]!=0){
			st.insert(i+1);
		}
	}
	return get();
}

int updateX(int pos, int val) {	
	pos++;
	if(x[pos]!=1)st.erase(pos);
	x[pos]=val;
	tx.update(1,1,n,pos,val);
	if(x[pos]!=1)st.insert(pos);
	return get();
}

int updateY(int pos, int val) {
	pos++;
	y[pos]=val;
	ty.update(1,1,n,pos,val);
	return get();
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 17
Accepted

Test #1:

score: 17
Accepted
time: 1ms
memory: 9908kb

input:

1
2
3
0

output:

6

result:

ok single line: '6'

Test #2:

score: 17
Accepted
time: 0ms
memory: 7856kb

input:

10
2 1 1 5 2 1 1 10 5 1
3 5 7 9 4 1 4 10 10 9
0

output:

10000

result:

ok single line: '10000'

Test #3:

score: 17
Accepted
time: 1ms
memory: 10192kb

input:

10
10 10 10 1 1 1 1 1 1 1
2 3 4 2 7 6 5 4 3 2
0

output:

7000

result:

ok single line: '7000'

Test #4:

score: 17
Accepted
time: 0ms
memory: 9852kb

input:

10
9 1 1 1 1 1 1 1 1 2
4 1 1 1 1 1 1 1 1 2
0

output:

36

result:

ok single line: '36'

Test #5:

score: 17
Accepted
time: 1ms
memory: 9900kb

input:

10
1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10
0

output:

10

result:

ok single line: '10'

Test #6:

score: 17
Accepted
time: 1ms
memory: 10192kb

input:

10
1 1 1 1 1 1 1 1 1 1
10 9 8 7 6 5 4 3 2 1
0

output:

10

result:

ok single line: '10'

Test #7:

score: 17
Accepted
time: 1ms
memory: 9904kb

input:

10
10 10 10 1 1 1 1 1 1 1
10 10 2 3 4 5 6 7 8 9
0

output:

9000

result:

ok single line: '9000'

Test #8:

score: 17
Accepted
time: 1ms
memory: 9900kb

input:

10
10 10 10 1 1 1 1 1 1 1
10 10 9 8 7 6 5 4 3 2
0

output:

9000

result:

ok single line: '9000'

Test #9:

score: 17
Accepted
time: 1ms
memory: 10188kb

input:

10
1 1 1 1 2 2 1 1 1 1
8 8 8 8 1 1 2 2 2 2
0

output:

8

result:

ok single line: '8'

Test #10:

score: 17
Accepted
time: 1ms
memory: 10192kb

input:

10
1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 9 8 7 6 1
0

output:

9

result:

ok single line: '9'

Test #11:

score: 17
Accepted
time: 1ms
memory: 7920kb

input:

2
2 5
9 7
0

output:

70

result:

ok single line: '70'

Test #12:

score: 17
Accepted
time: 0ms
memory: 7808kb

input:

1
1
1
0

output:

1

result:

ok single line: '1'

Test #13:

score: 17
Accepted
time: 1ms
memory: 9964kb

input:

7
7 1 1 6 2 3 2
7 6 5 4 3 7 1
0

output:

1764

result:

ok single line: '1764'

Test #14:

score: 17
Accepted
time: 1ms
memory: 9968kb

input:

1
10
10
0

output:

100

result:

ok single line: '100'

Test #15:

score: 17
Accepted
time: 1ms
memory: 7748kb

input:

2
1 4
7 2
0

output:

8

result:

ok single line: '8'

Test #16:

score: 17
Accepted
time: 1ms
memory: 10196kb

input:

10
1 10 1 10 1 1 10 1 1 1
7 3 10 10 4 10 1 4 5 10
0

output:

10000

result:

ok single line: '10000'

Test #17:

score: 17
Accepted
time: 1ms
memory: 9908kb

input:

6
1 1 1 1 1 1
1 1 1 1 1 1
0

output:

1

result:

ok single line: '1'

Test #18:

score: 17
Accepted
time: 1ms
memory: 10264kb

input:

4
1 2 4 8
8 4 2 1
0

output:

64

result:

ok single line: '64'

Test #19:

score: 17
Accepted
time: 0ms
memory: 9964kb

input:

6
1 2 2 3 1 1
7 1 1 2 1 1
0

output:

24

result:

ok single line: '24'

Test #20:

score: 17
Accepted
time: 0ms
memory: 10192kb

input:

10
2 1 1 5 2 1 1 10 5 1
3 5 7 9 4 1 4 10 7 9
0

output:

9000

result:

ok single line: '9000'

Subtask #2:

score: 0
Wrong Answer

Dependency #1:

100%
Accepted

Test #21:

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

input:

10
10 10 10 10 10 10 1 1 1 1
1 1 1 1 9 5 4 7 3 2
5
1 5 1
2 5 123456789
1 5 1
1 8 987654321
1 9 777777777

output:

7000000
900000
1000
1000
1000
75803567

result:

wrong answer 3rd lines differ - expected: '678813585', found: '1000'

Subtask #3:

score: 0
Wrong Answer

Test #33:

score: 0
Wrong Answer
time: 364ms
memory: 46628kb

input:

500000
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2...

output:

942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
942713367
...

result:

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

Subtask #4:

score: 0
Skipped

Dependency #2:

0%

Subtask #5:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%