QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#151563 | #2788. Horses | AbdelmagedNour# | 17 | 505ms | 41132kb | C++20 | 2.3kb | 2023-08-27 00:31:10 | 2024-07-04 01:51:50 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
//#include "grader.cpp"
#include "horses.h"
const int mod=(1e9)+7,MAXN=500005;
int add(int a,int b){
a+=b;
if(a>=mod)a-=mod;
return a;
}
int sub(int a,int b){
a-=b;
if(a<0)a+=mod;
return a;
}
int mul(int a,int b){
return(a*1LL*b)%mod;
}
int power(int x,int n){
int res=1;
while(n){
if(n&1)res=mul(res,x);
x=mul(x,x);
n>>=1;
}
return res;
}
int inv(int a){
return power(a,mod-2);
}
int divide(int a,int b){
return mul(a,inv(b));
}
int x[MAXN],y[MAXN],n;
set<int>not_one;
int bit[MAXN],tree[1<<20];
void upd(int i,int val){
for(;i<=n;i+=i&-i)bit[i]=mul(bit[i],val);
}
int qry(int i){
int res=1;
for(;i>=1;i-=i&-i)res=mul(res,bit[i]);
return res;
}
void update(int l,int r,int p,int idx,int val){
if(l==r){
tree[p]=val;
return;
}
int md=(l+r)>>1;
if(md>=idx)update(l,md,p*2+1,idx,val);
else update(md+1,r,p*2+2,idx,val);
tree[p]=max(tree[p*2+1],tree[p*2+2]);
}
int query(int l,int r,int p,int l_q,int r_q){
if(l>r_q||r<l_q)return 0;
if(l>=l_q&&r<=r_q)return tree[p];
int md=(l+r)>>1;
return max(query(l,md,p*2+1,l_q,r_q),query(md+1,r,p*2+2,l_q,r_q));
}
int solve(){
long long cur_factor=1,all_factor=1;
int last=n+1;
long long ans=0,best=0;
for(auto it=not_one.rbegin();it!=not_one.rend();it++){
int cur_pos=*it;
int cur_y=query(1,n,0,cur_pos,last-1);
if(cur_y>best*cur_factor) {
best=cur_y;
ans=mul(qry(cur_pos),cur_y);
cur_factor=1;
}
cur_factor*=x[cur_pos];
all_factor*=x[cur_pos];
if(all_factor>mod)break;
last=cur_pos;
}
return ans;
}
int init(int N, int X[], int Y[]) {
n=N;
x[0]=y[0]=1;
for(int i=1;i<=n;i++)x[i]=X[i-1],y[i]=Y[i-1];
for(int i=0;i<=n;i++)bit[i]=1;
for(int i=1;i<=n;i++){
upd(i,x[i]);
update(1,n,0,i,y[i]);
}
for(int i=1;i<=n;i++){
if(x[i]>1)not_one.insert(i);
}
not_one.insert(1);
return solve();
}
int updateX(int pos,int val){
pos++;
upd(pos,divide(val,x[pos]));
if(x[pos]>1&&pos>1)not_one.erase(pos);
x[pos]=val;
if(x[pos]>1)not_one.insert(pos);
return solve();
}
int updateY(int pos,int val){
pos++;
y[pos]=val;
update(1,n,1,pos,val);
return solve();
}
详细
Subtask #1:
score: 17
Accepted
Test #1:
score: 17
Accepted
time: 1ms
memory: 9976kb
input:
1 2 3 0
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Accepted
time: 0ms
memory: 9948kb
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: 0
Accepted
time: 0ms
memory: 9900kb
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: 0
Accepted
time: 1ms
memory: 9924kb
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: 0
Accepted
time: 0ms
memory: 9920kb
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: 0
Accepted
time: 1ms
memory: 7916kb
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: 0
Accepted
time: 0ms
memory: 9924kb
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: 0
Accepted
time: 1ms
memory: 7928kb
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: 0
Accepted
time: 0ms
memory: 9972kb
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: 0
Accepted
time: 1ms
memory: 9976kb
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: 0
Accepted
time: 2ms
memory: 9976kb
input:
2 2 5 9 7 0
output:
70
result:
ok single line: '70'
Test #12:
score: 0
Accepted
time: 0ms
memory: 9948kb
input:
1 1 1 0
output:
1
result:
ok single line: '1'
Test #13:
score: 0
Accepted
time: 2ms
memory: 9916kb
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: 0
Accepted
time: 1ms
memory: 7864kb
input:
1 10 10 0
output:
100
result:
ok single line: '100'
Test #15:
score: 0
Accepted
time: 1ms
memory: 10088kb
input:
2 1 4 7 2 0
output:
8
result:
ok single line: '8'
Test #16:
score: 0
Accepted
time: 0ms
memory: 9964kb
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: 0
Accepted
time: 1ms
memory: 9964kb
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: 0
Accepted
time: 0ms
memory: 10088kb
input:
4 1 2 4 8 8 4 2 1 0
output:
64
result:
ok single line: '64'
Test #19:
score: 0
Accepted
time: 2ms
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: 0
Accepted
time: 2ms
memory: 9964kb
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: 0ms
memory: 9972kb
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 567881362 567881362 294225928 75803567
result:
wrong answer 3rd lines differ - expected: '678813585', found: '567881362'
Subtask #3:
score: 0
Wrong Answer
Test #33:
score: 0
Wrong Answer
time: 505ms
memory: 41132kb
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:
967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 967631222 ...
result:
wrong answer 3rd lines differ - expected: '795463654', found: '967631222'
Subtask #4:
score: 0
Skipped
Dependency #2:
0%
Subtask #5:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%