답안 #401565

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
401565 2021-05-10T13:33:35 Z Fidisk Feast (NOI19_feast) C++14
32 / 100
110 ms 13176 KB
#include <bits/stdc++.h>
using namespace std;

#define oo 1e15
#define fi first
#define se second
#define sp(iiii) setprecision(iiii)
#define IO ios_base::sync_with_stdio(false); cin.tie(0)
#define ms(aaaa,xxxx) memset(aaaa,xxxx,sizeof(aaaa))
#define cntbit(xxxx) __builtin_popcount(xxxx)
#define getbit(xxxx,aaaa) ((xxxx>>(aaaa-1))&1)

typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<pair<int,int>,int> piii;
typedef pair<long long,long long> pll;
typedef pair<pair<long long,long long>,long long> plll;
typedef pair<pair<long long,long long>,pair<long long,long long>> pllll;
typedef pair<pair<long long,long long>,bool> pllb;

const ll base=361;
const ll mod=998244353;
const ld eps=1e-5;
const ll maxn=1e6;

struct comp{
    bool operator() (pll x,pll y) {
        return x.fi>y.fi;
    }
};

priority_queue<pll,vector<pll>,comp> heap;
ll n,k,i,a[400009],tmp,b[400009],m,l[400009],r[400009],res,cnt,cur;
bool ok[400009];

int main(){
    IO;
    cin>>n>>k;
    for (i=1;i<=n;i++) {
        cin>>a[i];
    }
    for (i=1;i<=n;i++) {
        if (a[i]*a[i-1]<0||cur*a[i]<0) {
            if (m==0&&cur<0) {
                cur=a[i];
                continue;
            }
            m++;
            b[m]=cur;
            cur=a[i];
        }
        else {
            cur+=a[i];
        }
    }
    if (cur>0) {
        m++;
        b[m]=cur;
    }
    //cout<<m<<'\n';
    for (i=1;i<=m;i++) {
        //cout<<b[i]<<' ';
        l[i]=i+1;
        r[i]=i-1;
        if (b[i]>0) {
            cnt++;
        }
        heap.push({abs(b[i]),i});
    }
    //cout<<'\n';
    r[1]=0;
    l[m]=0;
    l[0]=1;
    r[m+1]=m;
    while (cnt>k) {
        while (b[l[0]]<0) {
            ok[l[0]]=true;
            l[0]=l[l[0]];
            r[l[0]]=0;
        }
        while (b[r[m+1]]<0) {
            ok[r[m+1]]=true;
            r[m+1]=r[r[m+1]];
            l[r[m+1]]=0;
        }
        ll y=heap.top().fi;
        ll x=heap.top().se;
        heap.pop();
        if (ok[x]) continue;
        //cout<<b[x]<<' '<<l[x]<<' '<<r[x]<<'\n';
        tmp=0;
        if (b[x]>0) {
            tmp++;
        }
        if (b[r[x]]>0) {
            tmp++;
        }
        if (b[l[x]]>0) {
            tmp++;
        }
        if (b[x]+b[l[x]]+b[r[x]]>0) {
            tmp--;
        }
        cnt-=tmp;
        ok[l[x]]=true;
        ok[r[x]]=true;
        b[x]=b[l[x]]+b[r[x]]+b[x];
        l[x]=l[l[x]];
        r[x]=r[r[x]];
        if (l[x]!=0) {
            r[l[x]]=x;
        }
        if (r[x]!=0) {
            l[r[x]]=x;
        }
        //if (b[x]>=0) {
            heap.push({abs(b[x]),x});
        //}
    }
    for (i=1;i<=m;i++) {
        if (!ok[i]&&b[i]>0) {
            res+=b[i];
        }
    }
    cout<<res<<'\n';
}

Compilation message

feast.cpp: In function 'int main()':
feast.cpp:88:12: warning: unused variable 'y' [-Wunused-variable]
   88 |         ll y=heap.top().fi;
      |            ^
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 6004 KB Output is correct
2 Correct 46 ms 6088 KB Output is correct
3 Correct 45 ms 6088 KB Output is correct
4 Correct 36 ms 6108 KB Output is correct
5 Correct 37 ms 5992 KB Output is correct
6 Correct 36 ms 5940 KB Output is correct
7 Correct 36 ms 5992 KB Output is correct
8 Correct 38 ms 6060 KB Output is correct
9 Correct 39 ms 5960 KB Output is correct
10 Correct 39 ms 5980 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 24 ms 3716 KB Output is correct
2 Correct 24 ms 3724 KB Output is correct
3 Correct 24 ms 3652 KB Output is correct
4 Correct 24 ms 3652 KB Output is correct
5 Incorrect 38 ms 5968 KB Output isn't correct
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 110 ms 13132 KB Output is correct
2 Correct 95 ms 12988 KB Output is correct
3 Correct 90 ms 13068 KB Output is correct
4 Correct 86 ms 13056 KB Output is correct
5 Correct 92 ms 13036 KB Output is correct
6 Correct 88 ms 13116 KB Output is correct
7 Correct 87 ms 13176 KB Output is correct
8 Correct 92 ms 13116 KB Output is correct
9 Correct 107 ms 13104 KB Output is correct
10 Correct 104 ms 13116 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 460 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 460 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 324 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 1 ms 320 KB Output is correct
19 Correct 1 ms 332 KB Output is correct
20 Incorrect 1 ms 332 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 332 KB Output is correct
3 Correct 1 ms 460 KB Output is correct
4 Correct 1 ms 332 KB Output is correct
5 Correct 1 ms 332 KB Output is correct
6 Correct 1 ms 468 KB Output is correct
7 Correct 1 ms 332 KB Output is correct
8 Correct 1 ms 332 KB Output is correct
9 Correct 1 ms 332 KB Output is correct
10 Correct 1 ms 332 KB Output is correct
11 Correct 1 ms 332 KB Output is correct
12 Correct 1 ms 332 KB Output is correct
13 Correct 1 ms 324 KB Output is correct
14 Correct 1 ms 332 KB Output is correct
15 Correct 1 ms 332 KB Output is correct
16 Correct 1 ms 332 KB Output is correct
17 Correct 1 ms 332 KB Output is correct
18 Correct 1 ms 320 KB Output is correct
19 Correct 1 ms 332 KB Output is correct
20 Incorrect 1 ms 332 KB Output isn't correct
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 6004 KB Output is correct
2 Correct 46 ms 6088 KB Output is correct
3 Correct 45 ms 6088 KB Output is correct
4 Correct 36 ms 6108 KB Output is correct
5 Correct 37 ms 5992 KB Output is correct
6 Correct 36 ms 5940 KB Output is correct
7 Correct 36 ms 5992 KB Output is correct
8 Correct 38 ms 6060 KB Output is correct
9 Correct 39 ms 5960 KB Output is correct
10 Correct 39 ms 5980 KB Output is correct
11 Correct 24 ms 3716 KB Output is correct
12 Correct 24 ms 3724 KB Output is correct
13 Correct 24 ms 3652 KB Output is correct
14 Correct 24 ms 3652 KB Output is correct
15 Incorrect 38 ms 5968 KB Output isn't correct
16 Halted 0 ms 0 KB -