제출 #572430

#제출 시각아이디문제언어결과실행 시간메모리
572430HuyJust Long Neckties (JOI20_ho_t1)C++17
100 / 100
172 ms23736 KiB
#include<bits/stdc++.h>
#define int long long
#define pii pair<ll,ll>
#define fi first
#define se second

using namespace std;
using ll = long long;
using ldb = long double;
const int N = (int)1e8;
const int maxN = (int)2e5 + 5;
const int mod = 1e9 + 7;
const ll infty = 1e18;

void InputFile()
{
    //freopen("scrivener.inp","r",stdin);
    //freopen("scrivener.out","w",stdout);
    freopen("test.out","r",stdin);
}

void FastInput()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
}

int n,m;
int id[maxN];
int a[maxN];
int b[maxN];
int su[maxN][2];
/// 0 : i - 1
/// 1 : i

bool FA(int i,int j)
{
    return a[i] < a[j];
}

struct SegmentTree
{
    int ST[4*maxN];
    void Build(int id,int l,int r,int t)
    {
        if(l == r)
        {
            ST[id] = su[l][t];
            return;
        }
        int mid = (l + r) / 2;
        Build(id * 2,l,mid,t);
        Build(id * 2 + 1,mid + 1,r,t);
        ST[id] = max(ST[id*2],ST[id*2+1]);
    }
    int Get(int id,int l,int r,int u,int v)
    {
        if(u > v) return 0;
        if(v < l || u > r) return 0;
        if(u <= l && r <= v)
        {
            return ST[id];
        }
        int mid = (l + r) / 2;
        return max(Get(id*2,l,mid,u,v),Get(id*2+1,mid+1,r,u,v));
    }
};

SegmentTree SgT[2];

int res[maxN];

void Read()
{
    cin >> n;
    for(int i = 1;i <= n + 1;i++)
    {
        cin >> a[i];
        id[i] = i;
    }
    for(int i = 1;i <= n;i++)
        cin >> b[i];

    sort(id + 1,id + n + 2,FA);
    sort(b + 1,b + n + 1);
    for(int i = 1;i <= n + 1;i++)
    {
        su[i][0] = max(0LL,a[id[i]] - b[i-1]);
        su[i][1] = max(0LL,a[id[i]] - b[i]);
    }
    SgT[0].Build(1,1,n+1,0);
    SgT[1].Build(1,1,n+1,1);
    for(int i = 1;i <= n + 1;i++)
    {
        res[id[i]] = max(SgT[1].Get(1,1,n+1,1,i-1),SgT[0].Get(1,1,n+1,i+1,n+1));
    }
    for(int i = 1;i <= n + 1;i++)
    {
        cout << res[i] <<' ';
    }
}

void Solve()
{

}

void Debug()
{
    //Main_sub();
    //Naive();
}


int32_t main()
{
    FastInput();
    //InputFile();
    //int sub_type;
    //cin >> sub_type;
    //Sieve();
    int test;
    //cin >> test;
    test = 1;
    while(test--)
        //for(int prc = 1; prc <= test; prc++)
    {
        Read();
        Solve();
        //Debug();
    }
}

/*
4 1
1 1 1 1
1 2
2 3
3 4
*/

컴파일 시 표준 에러 (stderr) 메시지

ho_t1.cpp: In function 'void InputFile()':
ho_t1.cpp:19:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   19 |     freopen("test.out","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...