QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#687842#9528. New Energy Vehicleir101WA 3ms11852kbC++202.4kb2024-10-29 21:32:462024-10-29 21:32:50

Judging History

This is the latest submission verdict.

  • [2024-10-29 21:32:50]
  • Judged
  • Verdict: WA
  • Time: 3ms
  • Memory: 11852kb
  • [2024-10-29 21:32:46]
  • Submitted

answer

#include<bits/stdc++.h>
#define ll long long
#define PII pair<int,int>
#define endl '\n'
#define int long long
#define  lc p<<1
#define  rc p<<1|1
using namespace  std;
const int N=1e6+10;
int cnt;
struct node{
    int l,r;
    ll cnt;
}tr[N<<2];
int pp[N];
void push_up(int p){
    tr[p].cnt=tr[lc].cnt+tr[rc].cnt;
}
void build(int p,int l,int r){
    tr[p]={l,r,0};
    if(l==r){
        pp[l]=p;
        return;
    }
    int mid=l+r>>1;
    build(lc,l,mid);
    build(rc,mid+1,r);
    push_up(p);
}
void update(int p,int x,int k){
    // cout<<"d"<<endl;
    if(tr[p].l==x and tr[p].r==x){
        tr[p].cnt+=k;
        return;
    }
    int mid=tr[p].l+tr[p].r>>1;
    if(x<=mid){
        update(lc,x,k);
    }
    if(x>mid)update(rc,x,k);
    push_up(p);
}

int query(int p,ll syc){
    if(tr[p].cnt<syc)return -1ll;
    if(tr[p].l==tr[p].r){
        return tr[p].l;
    }
    if(tr[lc].cnt>=syc){
        return query(lc,syc);
    }
    else{
        syc-=tr[lc].cnt;
        if(tr[rc].cnt>=syc) return query(rc,syc);
        return -1ll;
    }

}
int L[N],R[N];
vector<int>nxt[N];
ll a[N];
PII b[N];
void solve(){
    int n,m;
    cin>>n>>m;
//    ::srand(time(0));
    ll s=0;
    for (int i = 1; i <=n ; ++i) {
        cin>>a[i];
        s+=a[i];
        nxt[i].clear();
        L[i]=0;
    }
    build(1,1,m+1);
    for (int i = 1; i <=m ; ++i) {
        cin>>b[i].first>>b[i].second;
        nxt[b[i].second].push_back(i);
    }
    for (int i = 1; i <=n ; ++i) {
        //  cout<<nxt[i].size()<<endl;
        if(nxt[i].size()){
            update(1,nxt[i][0],a[i]);
        }
        else{
            update(1,m+1,a[i]);
        }
    }
    int qs=0;
    ll ans=0;
    int pos=0;
    for (int i = 1; i <=m ; ++i) {
        auto [u,v]=b[i];
        int p= query(1,u-qs);
        if(p==-1)break;
        int sum=u-qs;
        for (int j = pos; j <p ; ++j) {
            sum-=tr[pp[j]].cnt;
            update(1,j,-tr[pp[j]].cnt);
        }
        update(1,p,-sum);
        update(1,i,-tr[pp[i]].cnt);
        L[v]++;
        if(nxt[v].size()<=L[v]){
            update(1,m+1,a[v]);
        }
        else update(1,nxt[v][L[v]],a[v]);
        pos=p;
        qs=u;
    }
    ans=qs+tr[1].cnt;
    cout<<ans<<endl;

}
signed main(){
    ios::sync_with_stdio(false),cin.tie(0);
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 3ms
memory: 11852kb

input:

2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1

output:

9
9

result:

wrong answer 1st lines differ - expected: '12', found: '9'