QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#438277 | #8718. 保区间最小值一次回归问题 | as_lyr | WA | 440ms | 20336kb | C++14 | 1.9kb | 2024-06-10 14:51:27 | 2024-06-10 14:51:29 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=510000;
const ll INF=1e18;
int n,m;
int a[N];
struct node{
int l,r,x;
}b[N];
int f[N];
int find(int x){
return f[x]==x?x:f[x]=find(f[x]);
}
int g[N];
inline int as(int x){
return x<0?-x:x;
}
ll dp[N];
void solve(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
scanf("%d%d%d",&b[i].l,&b[i].r,&b[i].x);
sort(b+1,b+m+1,[](const node x,const node y){
return x.x>y.x;
});
for(int i=1;i<=n+1;i++)
f[i]=i;
ll ans=0;
for(int i=1,j;i<=m;i=j+1){
j=i;
while(j<m&&b[i].x==b[j+1].x)
j++;
vector <int> v;
for(int k=i;k<=j;k++)
for(int x=find(b[k].l);x<=b[k].r;x=find(x+1)){
v.push_back(x);
f[x]=x+1;
}
sort(v.begin(),v.end());
sort(b+i,b+j+1,[](const node x,const node y){
return x.r<y.r;
});
if(v.empty()){
puts("-1");
return ;
}
for(int k=i;k<=j;k++)
if(lower_bound(v.begin(),v.end(),b[k].l)==upper_bound(v.begin(),v.end(),b[k].r+1)){
puts("-1");
return ;
}
for(int k=0;k<(int)v.size();k++)
g[k]=0;
for(int k=i;k<=j;k++){
int x=lower_bound(v.begin(),v.end(),b[k].l)-v.begin();
int y=upper_bound(v.begin(),v.end(),b[k].r+1)-v.begin()-1;
g[y]=max(g[y],x);
}
for(int k=1;k<(int)v.size();k++)
g[k]=max(g[k],g[k-1]);
dp[0]=as(a[v[0]]-b[i].x);
deque <pair<int,int>> q;
q.push_back(make_pair(0,dp[0]));
for(int k=1;k<(int)v.size();k++){
if(q.empty()==0&&q.front().first<g[k]-1)
q.pop_front();
dp[k]=q.front().second+as(a[v[k]]-b[i].x);
while(q.empty()==0&&q.back().second<dp[k])
q.pop_back();
q.push_back(make_pair(k,dp[k]));
}
ll res=INF;
for(int k=g[(int)v.size()-1];k<(int)v.size();k++)
res=min(res,dp[k]);
ans+=res;
}
printf("%lld\n",ans);
}
int main(){
int T;
scanf("%d",&T);
while(T--)
solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 1ms
memory: 11928kb
input:
1 3 2 2023 40 41 1 1 2022 2 3 39
output:
2
result:
ok 1 number(s): "2"
Test #2:
score: -100
Wrong Answer
time: 440ms
memory: 20336kb
input:
1000 100 100 1 35141686 84105222 84105220 7273527 178494861 178494861 112519027 77833654 77833656 261586535 278472336 278472336 261586536 416361017 416361017 426649080 323519513 278472337 420127821 420127823 420127823 482516531 434108818 420127821 631535744 615930922 546346921 546346920 546346920 70...
output:
46 42 64 50 63 62 59 44 55 56 58 59 1206 53 54 57 48 56 65 51 59 40 51 57 67 51 54 45 44 50 50 54 60 48 58 50 59 60 50 60 64 66 45 55 1307 1175 64 60 63 48 39 50 56 53 52 57 52 51 49 55 35 48 53 52 52 43 54 63 60 59 56 45 40 51 59 65 60 63 64 53 51 52 47 55 55 47 57 58 48 59 51 52 59 62 45 45 47 64 ...
result:
wrong answer 1st numbers differ - expected: '49', found: '46'