Submission #1112350

#TimeUsernameProblemLanguageResultExecution timeMemory
1112350onlk97Constellation 3 (JOI20_constellation3)C++14
100 / 100
234 ms26188 KiB
#include <bits/stdc++.h>
#define int long long
#define x first
#define y second
#define pb push_back
using namespace std;
using pii=pair <int,int>;
using tii=pair <pii,int>;
bool cmp(tii a,tii b){
    return a.x.y<b.x.y;
}
int bit[200010];
void upd(int pos,int val){
    for (int i=pos; i<200010; i+=i&(-i)) bit[i]+=val;
}
int qry(int pos){
    int ret=0;
    for (int i=pos; i>0; i-=i&(-i)) ret+=bit[i];
    return ret;
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    int n;
    cin>>n;
    int a[n+1];
    for (int i=1; i<=n; i++) cin>>a[i];
    pii p[n+1];
    for (int i=1; i<=n; i++) p[i]={a[i],i};
    sort(p+1,p+n+1);
    int m;
    cin>>m;
    tii st[m+1];
    for (int i=1; i<=m; i++) cin>>st[i].x.x>>st[i].x.y>>st[i].y;
    sort(st+1,st+m+1,cmp);
    int ans=0,ptr=1;
    set <int> rem;
    for (int i=1; i<=n; i++) rem.insert(i);
    for (int i=1; i<=m; i++){
        while (ptr<=n&&p[ptr].x<st[i].x.y){
            rem.erase(p[ptr].y);
            ptr++;
        }
        int cost=st[i].y-qry(st[i].x.x);
        if (cost>0){
            ans+=cost;
            auto it=rem.lower_bound(st[i].x.x);
            int r=(it==rem.end()?n:(*it)-1);
            int l=(it==rem.begin()?1:*(--it)+1);
            upd(l,cost); upd(r+1,-cost);
        }
    }
    int sum=0;
    for (int i=1; i<=m; i++) sum+=st[i].y;
    cout<<sum-ans<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...