답안 #817775

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
817775 2023-08-09T16:10:53 Z t6twotwo Measures (CEOI22_measures) C++17
100 / 100
289 ms 32416 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define FFOR(i,a,b,c) for(int i=(a);(c)>0?i<=(b):i>=(b);i+=(c))
#define FOOR(i,a,b) FFOR(i,a,(b)-1,1)
#define ROOF(i,a,b) FFOR(i,(b)-1,a,-1)
#define FOR(i,n) FOOR(i,0,n)
#define ROF(i,n) ROOF(i,0,n)
#define FORR(x,v) for(auto &x:v)
#define vc vector
#define sz(v) (int)((v).size())
#define bg begin()
#define en end()
#define em empty()
#define lb lower_bound
#define ub upper_bound
#define pb push_back
#define ppb pop_back()
#define eb emplace_back
#define bk back()
#define fr front()
#define pp pop()
#define all(v) (v).begin(),(v).end()
#define lla(v) (v).rbegin(),(v).rend()
#define f first
#define s second
struct node {
    ll sum, pre, suf, best;
    node(){sum=pre=suf=best=0;}
    node(ll a){sum=a;pre=suf=best=min(a,0ll);}
};
node operator+(const node &a, const node &b) {
    node c;
    c.sum=a.sum+b.sum;
    c.pre=min(a.pre,a.sum+b.pre);
    c.suf=min(b.suf,b.sum+a.suf);
    c.best=min({a.best,b.best,a.suf+b.pre});
    return c;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N,M,D;
    cin>>N>>M>>D;
    if(M<=10){
        vc<int> a(N);
        FORR(x,a)cin>>x;
        FOR(i,M){
            int b;
            cin>>b;
            a.pb(b);
            sort(all(a));
            ll s=0,ans=0;
            FOOR(j,1,sz(a)){
                ll k=a[j]-a[j-1]-D;
                s=min(k,s+k);
                ans=min(ans,s);
            }
            ans=-ans;
            if(ans%2==1){
                cout<<ans/2<<"."<<5<<" ";
            }else{
                cout<<ans/2<<" ";
            }
        }
        return 0;
    }
    vc<int> b(M);
    vc<pair<int,int>> p(M);
    FOR(i,M){
        cin>>b[i];
        p[i]={b[i],i};
    }
    sort(all(p));
    vc<int> pos(M);
    FOR(i,M) pos[p[i].s]=i;
    int K=2<<__lg(M);
    vc<node> st(2*K);
    auto upd = [&](int i, ll v) {
        for(st[i+=K]=v;i/=2;) {
            st[i]=st[i*2]+st[i*2+1];
        }
    };
    set<int> s;
    FOR(i,M){
        auto it=s.ub(pos[i]);
        if(it!=s.bg){
            upd(pos[i],b[i]-p[*prev(it)].f-D);
        }
        if(it!=s.en){
            upd(*it,p[*it].f-b[i]-D);
        }
        s.insert(pos[i]);
        ll ans=-st[1].best;
        if(ans%2==1){
            cout<<ans/2<<"."<<5<<" ";
        }else{
            cout<<ans/2<<" ";
        }
    }
    return 6/22;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 2 ms 212 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 1 ms 340 KB Output is correct
4 Correct 2 ms 212 KB Output is correct
5 Correct 1 ms 340 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 340 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 99 ms 1888 KB Output is correct
10 Correct 145 ms 1876 KB Output is correct
11 Correct 44 ms 1876 KB Output is correct
12 Correct 152 ms 1888 KB Output is correct
13 Correct 39 ms 1884 KB Output is correct
14 Correct 94 ms 1876 KB Output is correct
15 Correct 89 ms 1876 KB Output is correct
16 Correct 41 ms 1888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 123 ms 30316 KB Output is correct
2 Correct 130 ms 32148 KB Output is correct
3 Correct 130 ms 32140 KB Output is correct
4 Correct 123 ms 29944 KB Output is correct
5 Correct 124 ms 31316 KB Output is correct
6 Correct 125 ms 30440 KB Output is correct
7 Correct 135 ms 31344 KB Output is correct
8 Correct 148 ms 30072 KB Output is correct
9 Correct 130 ms 29940 KB Output is correct
10 Correct 129 ms 32376 KB Output is correct
11 Correct 134 ms 30844 KB Output is correct
12 Correct 130 ms 31820 KB Output is correct
13 Correct 135 ms 29964 KB Output is correct
14 Correct 129 ms 31924 KB Output is correct
15 Correct 131 ms 31880 KB Output is correct
16 Correct 129 ms 29976 KB Output is correct
17 Correct 125 ms 31284 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 123 ms 30316 KB Output is correct
2 Correct 130 ms 32148 KB Output is correct
3 Correct 130 ms 32140 KB Output is correct
4 Correct 123 ms 29944 KB Output is correct
5 Correct 124 ms 31316 KB Output is correct
6 Correct 125 ms 30440 KB Output is correct
7 Correct 135 ms 31344 KB Output is correct
8 Correct 148 ms 30072 KB Output is correct
9 Correct 130 ms 29940 KB Output is correct
10 Correct 129 ms 32376 KB Output is correct
11 Correct 134 ms 30844 KB Output is correct
12 Correct 130 ms 31820 KB Output is correct
13 Correct 135 ms 29964 KB Output is correct
14 Correct 129 ms 31924 KB Output is correct
15 Correct 131 ms 31880 KB Output is correct
16 Correct 129 ms 29976 KB Output is correct
17 Correct 125 ms 31284 KB Output is correct
18 Correct 289 ms 30412 KB Output is correct
19 Correct 266 ms 32048 KB Output is correct
20 Correct 131 ms 32120 KB Output is correct
21 Correct 175 ms 30128 KB Output is correct
22 Correct 201 ms 30492 KB Output is correct
23 Correct 188 ms 30304 KB Output is correct
24 Correct 253 ms 30836 KB Output is correct
25 Correct 126 ms 29912 KB Output is correct
26 Correct 288 ms 30012 KB Output is correct
27 Correct 259 ms 32416 KB Output is correct
28 Correct 186 ms 30420 KB Output is correct
29 Correct 241 ms 31724 KB Output is correct
30 Correct 179 ms 29876 KB Output is correct
31 Correct 180 ms 31948 KB Output is correct
32 Correct 170 ms 31884 KB Output is correct
33 Correct 275 ms 30060 KB Output is correct
34 Correct 183 ms 31340 KB Output is correct