QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#466704#3558. Constellation 3Rafi220 6ms37180kbC++143.9kb2024-07-08 03:40:192024-07-08 03:40:19

Judging History

This is the latest submission verdict.

  • [2024-07-08 03:40:19]
  • Judged
  • Verdict: 0
  • Time: 6ms
  • Memory: 37180kb
  • [2024-07-08 03:40:19]
  • Submitted

answer

#include <bits/stdc++.h>

#define ll long long
#define ld long double
//#define endl '\n'
#define st first
#define nd second
#define pb push_back
#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
#define FOR(i,l,r) for(int i=(l);i<=(r);i++)
#define ROF(i,r,l) for(int i=(r);i>=(l);i--)
using namespace std;
int inf=1000000007;
ll infl=1000000000000000007;
int mod=1000000007;
int mod1=998244353;

const int N=200007,pot=1<<18;

struct T
{
    ll seg[2*pot+7];
    T()
    {
        memset(seg,0,sizeof seg);
    }
    void add(int v,int a,int b,int l,int r,int x)
    {
        if(a<=l&&b>=r)
        {
            seg[v]+=x;
            return ;
        }
        if(r<a||l>b) return;
        add(2*v,a,b,l,(l+r)/2,x);
        add(2*v+1,a,b,(l+r)/2+1,r,x);
    }
    ll que(int v)
    {
        ll res=0;
        v+=pot-1;
        while(v>0)
        {
            res+=seg[v];
            v/=2;
        }
        return res;
    }
};

int a[N],id[N],ord[N];

ll DPl[N],DPr[N];

int L[N],R[N];
int lx[N],rx[N];
vector<int>G[N],G1[N];
int pre[N],post[N],cc;
int pre1[N],post1[N];

void dfs(int v)
{
    pre[v]=++cc;
    for(auto u:G[v]) dfs(u);
    post[v]=cc;
}
void dfs1(int v)
{
    pre1[v]=++cc;
    for(auto u:G1[v]) dfs1(u);
    post1[v]=cc;
}

vector<pair<int,ll>>V[N];
pair<int,int>seg[2*pot+7];

void del(int v)
{
    V[v].pop_back();
    seg[v+pot-1]={V[v].back().st,v};
    v+=pot-1;
    while(v>1)
    {
        v/=2;
        seg[v]=min(seg[2*v],seg[2*v+1]);
    }
}

pair<int,int>que(int v,int a,int b,int l,int r)
{
    if(a<=l&&b>=r) return seg[v];
    if(r<a||l>b) return {inf,0};
    return min(que(2*v,a,b,l,(l+r)/2),que(2*v+1,a,b,(l+r)/2+1,r));
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin>>n;
    vector<pair<int,int>>VV;
    a[0]=inf-1;
    a[n+1]=inf-1;
    id[n+1]=n+1;
    ord[n+1]=n+1;
    FOR(i,1,n)
    {
        cin>>a[i];
        VV.pb({a[i],i});
    }
    sort(all(VV));
    FOR(i,1,n)
    {
        id[VV[i-1].nd]=i;
        ord[i]=VV[i-1].nd;
    }
    deque<pair<int,int>>Q;
    Q.pb({inf,0});
    FOR(i,1,n+1)
    {
        while(Q.back().st<id[i])
        {
            R[Q.back().nd]=i;
            G1[i].pb(Q.back().nd);
            lx[i]=Q.back().nd;
            Q.pop_back();
        }
        L[i]=Q.back().nd;
        G[Q.back().nd].pb(i);
        rx[Q.back().nd]=i;
        Q.pb({id[i],i});
    }
    dfs(0);
    cc=0;
    dfs1(n+1);
    cin>>m;
    ll sum=0;
    FOR(i,1,m)
    {
        int x,y,c;
        cin>>x>>y>>c;
        V[x].pb({y,c});
        sum+=(ll)c;
    }
    FOR(i,1,n)
    {
        V[i].pb({inf,0});
        sort(all(V[i]),greater<pair<int,int>>());
        seg[i+pot-1]={V[i].back().st,i};
    }
    ROF(i,pot-1,1) seg[i]=min(seg[2*i],seg[2*i+1]);
    T S,S1;
    FOR(k,1,n+1)
    {
        int i=ord[k];
        //liczymy DPl
        DPl[i]=DPl[lx[i]]+DPr[lx[i]];
        while(true)
        {
            pair<int,int>p=que(1,L[i]+1,i-1,1,pot);
            if(p.st>a[i]) break;
            ll Ls=S.que(pre[p.nd])-S.que(pre[L[i]]);
            ll Rs=S1.que(pre1[p.nd])-S1.que(pre1[i]);
            DPl[i]=max(DPl[i],V[p.nd].back().nd+Ls+Rs);
            del(p.nd);
        }
        //liczymy DPr
        if(i==n+1) break;
        DPr[i]=DPl[rx[i]]+DPr[rx[i]];
        while(true)
        {
            pair<int,int>p=que(1,i+1,R[i]-1,1,pot);
            if(p.st>a[i]) break;
            ll Ls=S.que(pre[p.nd])-S.que(pre[i]);
            ll Rs=S1.que(pre1[p.nd])-S1.que(pre1[R[i]]);
            DPr[i]=max(DPr[i],V[p.nd].back().nd+Ls+Rs);
            del(p.nd);
        }
        S.add(1,pre[i],post[i],1,pot,DPl[i]);
        S1.add(1,pre1[i],post1[i],1,pot,DPr[i]);
    }
    cout<<sum-DPl[n+1]<<endl;

    return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 14
Accepted
time: 6ms
memory: 37180kb

input:

297
296 275 40 154 200 77 201 106 133 163 127 268 225 154 27 202 272 176 133 116 151 11 262 281 188 152 249 53 133 106 160 62 104 210 54 201 184 110 199 217 155 193 168 239 277 22 230 187 201 14 85 100 159 129 69 241 150 10 20 263 285 76 219 52 40 241 126 182 23 55 243 145 203 163 251 243 13 292 249...

output:

4354552

result:

ok single line: '4354552'

Test #2:

score: -14
Wrong Answer
time: 0ms
memory: 29396kb

input:

285
243 196 230 42 278 255 93 14 131 30 113 79 6 15 231 98 99 171 144 65 218 73 128 214 120 53 3 272 52 279 243 171 74 179 62 130 22 69 226 283 276 82 79 50 228 114 72 150 266 200 150 118 8 181 182 211 211 199 100 96 149 35 47 93 226 257 25 230 170 110 265 19 191 241 181 120 87 132 76 5 16 175 235 2...

output:

141522494283

result:

wrong answer 1st lines differ - expected: '127882114793', found: '141522494283'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #1:

0%