QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#693118 | #9528. New Energy Vehicle | ZycK# | WA | 0ms | 4072kb | C++14 | 1.7kb | 2024-10-31 15:34:08 | 2024-10-31 15:34:08 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n; ll m;
const int maxn=1e5+4;
int a[maxn],x[maxn],t[maxn],b[maxn];
bool used[maxn];
int nxt[maxn];
void solve()
{
scanf("%d%d",&n,&m);
ll sum=0;
for(int i=1;i<=n;i++)
{
used[i]=0;
scanf("%d",&a[i]);
b[i]=a[i];
sum+=a[i];
}
set<pair<int,int> >S;
set<int> U;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x[i],&t[i]);
if(!used[t[i]]) S.insert(make_pair(i,t[i]));
used[t[i]]=1;
}
nxt[m+1]=m+1;
for(int i=m;i>=1;i--)
{
if(t[i]==t[i+1]) nxt[i]=nxt[i+1];
else nxt[i]=i+1;
}
for(int i=1;i<=n;i++)
{
if(!used[i]) U.insert(i);
}
for(int i=1;i<=m;i++)
{
if(sum<x[i]-x[i-1])
{
printf("%lld\n",x[i-1]+sum);
return;
}
sum-=x[i]-x[i-1];
ll tmp=x[i]-x[i-1];
while(S.size())
{
int cur=(*S.begin()).second;
int tt=(*S.begin()).first;
S.erase((*S.begin()));
if(b[cur]>=tmp)
{
b[cur]-=tmp; tmp=0;
S.insert(make_pair(tt,cur));
break;
}
else
tmp-=b[cur],b[cur]=0;
}
// cerr<<sum<<endl;
while(tmp&&U.size())
{
int cur=(*U.begin());
// cerr<<cur<<endl;
U.erase(cur);
if(b[cur]>=tmp)
{
b[cur]-=tmp; tmp=0;
if(b[cur]) U.insert(cur);
break;
}
else tmp-=b[cur],b[cur]=0;
}
// cerr<<sum<<" "<<a[t[i]]<<" "<<b[t[i]]<<endl;
sum+=a[t[i]]-b[t[i]];
b[t[i]]=a[t[i]];
while(S.size()&&(*S.begin()).first<=i)
S.erase(S.begin());
// cerr<<sum<<" "<<a[t[i]]<<endl;
if(nxt[i]>m) U.insert(t[i]);
else
{
S.insert(make_pair(nxt[i],t[i]));
}
}
printf("%lld\n",x[m]+sum);
}
int main()
{
int T; cin>>T;
while(T--) solve();
}
/*
2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1
*/
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 4072kb
input:
2 3 1 3 3 3 8 1 2 2 5 2 1 2 2 1
output:
12 9
result:
ok 2 lines
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3820kb
input:
6 3 2 2 2 2 6 1 7 1 2 2 3 3 2 1 6 2 2 3 2 2 5 1 7 2 9 1 2 2 3 3 2 1 6 2 1 1 999999999 1000000000 1 1 1 1000000000 1000000000 1
output:
9 9 4 9 999999999 2000000000
result:
wrong answer 2nd lines differ - expected: '11', found: '9'