제출 #1143509

#제출 시각아이디문제언어결과실행 시간메모리
1143509simplemind_31휴가 (IOI14_holiday)C++20
47 / 100
5091 ms7008 KiB
#include"holiday.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef tree<ll,null_type,less_equal<ll>,rb_tree_tag,tree_order_statistics_node_update> llset;
ll findMaxAttraction(int n,int start,int d,int attraction[]){
    if(start==0){
        llset res;
        ll sum=0;
        ll maxi=0;
        for(ll i=0;i<(ll)((d+1)/2) && i<n;i++){
            res.insert(attraction[i]);
            sum+=attraction[i];
        }
        maxi=sum;
        for(ll i=(d+1)/2;i<n;i++){
            sum+=attraction[i];
            res.insert(attraction[i]);
            while(res.size()>0 && res.size()>d-i){
                sum-=*res.begin();
                res.erase(res.begin());
            }
            maxi=max(maxi,sum);
        }
        return maxi;
    }
    ll maxi=0;
    llset res;
    for(ll i=0;i<n;i++){
        res.clear();
        ll sum=0;
        for(ll j=i;j<n;j++){
            ll usado=0;
            if(i<=start && j<=start){
                usado=abs(start-i);
            }else if(i>start && j>start){
                usado=abs(start-j);
            }else{
                usado=2*min(abs(start-i),abs(start-j))+max(abs(start-i),abs(start-j));
            }
            sum+=attraction[j];
            res.insert(attraction[j]);
            while(res.size()>max(0ll,d-usado)){
                sum-=*res.begin();
                res.erase(res.begin());
            }
            maxi=max(maxi,sum);
        }
    }
    return maxi;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...