답안 #145486

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
145486 2019-08-20T08:54:10 Z MKopchev 중앙값 배열 (balkan11_medians) C++14
70 / 100
300 ms 10104 KB
#include<bits/stdc++.h>
using namespace std;
const int nmax=2e5+42;
int n,inp[nmax];
int output[nmax];

set<int> active;

map<int,int> seen;
int get_front(int now)
{
    set<int>::iterator it=lower_bound(active.begin(),active.end(),now);
    it--;
    int num=*it;
    active.erase(it);
    return num;
}
int get_back(int now)
{
    set<int>::iterator it=lower_bound(active.begin(),active.end(),now);
    int num=*it;
    active.erase(it);
    return num;
}
int main()
{
    scanf("%i",&n);
    for(int i=1;i<=n;i++)
        scanf("%i",&inp[i]);

    for(int i=1;i<=2*n-1;i++)
        active.insert(i);

    output[1]=inp[1];

    for(int i=1;i<n;i++)
    {
        seen[inp[i]]++;
        active.erase(inp[i]);
    }

    for(int i=n-1;i>=1;i--)
    {
        if(inp[i]<inp[i+1])
        {
            set<int>::iterator it=lower_bound(active.begin(),active.end(),inp[i]);
            int num=*it;
            it++;
            int num_2=*it;

            output[2*i+1]=num;
            output[2*i]=num_2;

            active.erase(num);
            active.erase(num_2);
        }
        else if(inp[i]>inp[i+1])
        {
            set<int>::iterator it=lower_bound(active.begin(),active.end(),inp[i]);
            it--;
            int num=*it;
            it--;
            int num_2=*it;

            output[2*i+1]=num;
            output[2*i]=num_2;

            active.erase(num);
            active.erase(num_2);
        }
        else
        {
            output[2*i+1]=get_back(inp[i]);
            output[2*i]=get_front(inp[i]);
        }
        seen[inp[i]]--;
        if(seen[inp[i]]==0)
            active.insert(inp[i]);
    }
    for(int i=1;i<=2*n-1;i++)
        printf("%i ",output[i]);
    return 0;
}

Compilation message

medians.cpp: In function 'int main()':
medians.cpp:27:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%i",&n);
     ~~~~~^~~~~~~~~
medians.cpp:29:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%i",&inp[i]);
         ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Correct 2 ms 376 KB Output is correct
9 Correct 2 ms 376 KB Output is correct
10 Correct 2 ms 376 KB Output is correct
11 Correct 4 ms 376 KB Output is correct
12 Correct 7 ms 376 KB Output is correct
13 Correct 20 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 504 KB Output is correct
2 Execution timed out 312 ms 888 KB Time limit exceeded
3 Execution timed out 1090 ms 1400 KB Time limit exceeded
4 Execution timed out 1087 ms 1912 KB Time limit exceeded
5 Execution timed out 1073 ms 3448 KB Time limit exceeded
6 Execution timed out 1065 ms 6648 KB Time limit exceeded
7 Execution timed out 1091 ms 10104 KB Time limit exceeded