QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#510237 | #6531. Base Station Construction | ucup-team3474 | WA | 55ms | 15192kb | C++23 | 1.1kb | 2024-08-09 00:21:28 | 2024-08-09 00:21:29 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=1919810;
typedef long long ll;
typedef pair<ll,ll> PII;
ll n,m,k;
ll a[N],b[N];
ll dp[N];
ll ne[N];
ll q[N],tt,hh;
int s[N];
void __(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) dp[i]=0;
vector<PII> v;
scanf("%lld",&m);
bool flag=1;
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
if(y==n) flag=0;
v.push_back({y,x});
}
sort(v.begin(),v.end());
int j=0;
for(int i=1;i<=n;i++){
ne[i]=ne[i-1];
while(j<v.size()&&v[j].first<i){
ne[i]=max(ne[i],v[j].second);
j++;
}
// cout<<ne[i]<<" ";
}
// cout<<endl;
tt=0,hh=0;
q[0]=0;
for(int i=1;i<=n;i++){
while(hh<=tt&&q[hh]<ne[i]) hh++;
dp[i]=dp[q[hh]]+a[i];
while(hh<=tt&&dp[i]<dp[q[hh]]) tt--;
q[++tt]=i;
}
printf("%lld\n",dp[n]-flag*a[n]);
}
int main(){
int _=1;
cin>>_;
while(_--){
__();
}
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 9936kb
input:
2 5 3 2 4 1 100 3 1 3 2 4 5 5 5 7 3 4 2 2 3 1 4 2 3 4 5
output:
102 5
result:
ok 2 number(s): "102 5"
Test #2:
score: -100
Wrong Answer
time: 55ms
memory: 15192kb
input:
6201 12 88 78 46 95 84 98 55 3 68 42 6 18 19 6 9 10 11 12 12 8 11 8 12 2 3 2 3 1 5 9 9 7 8 6 11 2 4 12 12 2 4 2 9 7 10 8 8 1 7 6 11 5 76 27 48 66 61 2 1 4 3 5 8 64 81 20 6 86 9 4 55 1 7 7 9 1 43 18 81 11 22 9 61 83 14 5 6 2 6 5 8 1 4 9 9 9 9 7 7 2 5 8 9 5 6 4 8 5 8 9 9 6 6 10 66 41 84 7 80 31 22 96 ...
output:
209 137 4 157 362 141 42 220 174 139 245 206 217 162 230 127 287 89 156 130 148 46 1 193 299 93 239 303 236 150 177 57 46 82 157 66 83 160 151 62 35 168 156 81 171 290 110 242 126 121 335 86 311 244 333 162 302 81 304 238 30 129 75 131 96 179 81 382 142 185 77 176 215 373 211 56 120 39 234 118 348 1...
result:
wrong answer 1st numbers differ - expected: '141', found: '209'