QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#683555#9528. New Energy Vehicleestrellad#WA 2ms11756kbC++202.7kb2024-10-27 21:50:312024-10-27 21:50:32

Judging History

This is the latest submission verdict.

  • [2024-10-27 21:50:32]
  • Judged
  • Verdict: WA
  • Time: 2ms
  • Memory: 11756kb
  • [2024-10-27 21:50:31]
  • Submitted

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'