QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#657231 | #2788. Horses | Pioneer# | 0 | 365ms | 46588kb | C++20 | 2.7kb | 2024-10-19 14:25:05 | 2024-10-19 14:25:05 |
Judging History
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];
segtree(){
memset(mark,0,sizeof(mark));
}
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;
vec.push_back(*st.rbegin());
st.erase(--st.end());
while(!st.empty()&&vec.size()<=40){
assert(*st.rbegin()==vec.back()-1);
int pos1=ty.get(1,1,n,*st.rbegin(),vec.back()-1).second;
vec.push_back(*st.rbegin());
st.erase(--st.end());
pair<int,bool> bf=tx.get(1,1,n,pos1+1,pos);
if(bf.second||bf.first*1ll*y[pos]>=mod)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]!=1){
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();
}
詳細信息
Subtask #1:
score: 0
Runtime Error
Test #1:
score: 17
Accepted
time: 0ms
memory: 13016kb
input:
1 2 3 0
output:
6
result:
ok single line: '6'
Test #2:
score: 0
Runtime Error
input:
10 2 1 1 5 2 1 1 10 5 1 3 5 7 9 4 1 4 10 10 9 0
output:
Unauthorized output
result:
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Wrong Answer
Test #33:
score: 0
Wrong Answer
time: 365ms
memory: 46588kb
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:
0%