QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#683555 | #9528. New Energy Vehicle | estrellad# | WA | 2ms | 11756kb | C++20 | 2.7kb | 2024-10-27 21:50:31 | 2024-10-27 21:50:32 |
Judging History
answer
// dzx
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
const int N=1e5+10;
const int M=N-10,INF=1e18+10,P=998244353;
typedef pair<int,int> PII;
#define fi first
#define se second
PII q[N];
int a[N],n,m;
struct segmentTree{
#define ls (u<<1)
#define rs (u<<1|1)
#define mid ((l+r)>>1)
int s[N<<2]{},tag[N<<2]{},siz[N<<2]{};
void pushdown(int u){
if(tag[u]!=0){
tag[ls]+=tag[u];
tag[rs]+=tag[u];
s[ls]+=siz[ls]*tag[u];
s[rs]+=siz[rs]*tag[u];
}
tag[u]=0;
}
void pushup(int u){
s[u]=s[ls]+s[rs];
siz[u]=siz[ls]+siz[rs];
}
void build(int u,int l,int r){
tag[u]=0;//多测清零
if(l==r){
s[u]=0;
siz[u]=1;
tag[u]=0;
return;
}
build(ls,l,mid),build(rs,mid+1,r);
pushup(u);
}
void modify(int u,int l,int r,int ql,int qr,int k){
if(ql<=l&&r<=qr){
s[u]+=siz[u]*k;
tag[u]+=k;
return;
}
pushdown(u);
if(ql<=mid)modify(ls,l,mid,ql,qr,k);
if(qr>mid)modify(rs,mid+1,r,ql,qr,k);
pushup(u);
}
int query(int u,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr){
return s[u];
}
pushdown(u);
int res=0;
if(ql<=mid)res=query(ls,l,mid,ql,qr);
if(qr>mid)res+=query(rs,mid+1,r,ql,qr);
return res;
}
}Tr;
void solve(){
cin>>n>>m;
int s=0;
for(int i=1;i<=n;i++){
cin>>a[i];
s+=a[i];
}
for(int i=1;i<=m;i++){
int d,k;
cin>>d>>k;
q[i]={d,k};
}
Tr.build(1,1,n);
int sd=0;
for(int i=1;i<=m;i++){
auto [d,id]=q[i];
if(s<(d-sd)){
cout<<sd+s<<endl;
return;
}
if((d-sd)>=a[id]){
Tr.modify(1,1,n,1,n,a[id]);
Tr.modify(1,1,n,id,id,(d-sd)-a[id]);
sd=sd+a[id];
// cout<<id<<" "<<d<<" "<<sd<<endl;
}
else{
int tres=Tr.query(1,1,n,id,id);
if(d-tres>=a[id]){
Tr.modify(1,1,n,1,n,a[id]);
Tr.modify(1,1,n,id,id,(d-tres)-a[id]);
sd+=a[id];
}else{
Tr.modify(1,1,n,1,n,d-tres);
// cout<<Tr.query(1,1,n,id,id)<<" "<<d-tres<<endl;
sd+=d-tres;
}
// cout<<id<<" "<<d<<" "<<tres<<" "<<sd<<endl;
}
}
cout<<sd+s<<endl;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int _T=1;
cin>>_T;
while(_T--)solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 11756kb
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: 1ms
memory: 9700kb
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:
10 11 4 11 999999999 2000000000
result:
wrong answer 1st lines differ - expected: '9', found: '10'