답안 #169252

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
169252 2019-12-19T09:35:21 Z wolfris 운세 보기 2 (JOI14_fortune_telling2) C++14
컴파일 오류
0 ms 0 KB
#include <iostream>
#include <algorithm>

using namespace std;

long long n, k, a[200015], b[200015], g[200015], c[200015], x[200015], cnt[200015], BIT[200015], IT[1000015];

int getnum(int x) {
    int res = 0;
    for (x = upper_bound(c + 1, c + k + 1, x) - c; x <= k; x += x & -x)
        res += BIT[x];
    return res;
}

void addup(int x) {
    for (x = lower_bound(c + 1, c + k + 1, x) - c; x >= 1; x -= x & -x)
        ++BIT[x];
}

void update(int x, int p, int k, int l, int r) {
    if (x < c[l] || c[r] < x) return;
    IT[k] = max(IT[k], p);
    if (l < r)
        update(x, p, 2 * k, l, (l + r) / 2),
        update(x, p, 2 * k + 1, (l + r) / 2 + 1, r);
}

int getpos(int a, int b, int k, int l, int r) {
    if (b < c[l] || c[r] < a) return 0;
    if (a <= c[l] && c[r] <= b) return IT[k];
    return max(getpos(a, b, 2 * k, l, (l + r) / 2), getpos(a, b, 2 * k + 1, (l + r) / 2 + 1, r));
}

int main() {
    cin >> n >> k;
    for (int i = 1; i <= n; ++i) {
        cin >> a[i] >> b[i];
        if (a[i] > b[i])
            swap(a[i], b[i]),
            g[i] = 1;
    }
    for (int i = 1; i <= k; ++i)
        cin >> x[i], c[i] = x[i];
    sort(c + 1, c + k + 1);
    for (int i = k; i >= 1; --i)
        cnt[i] = getnum(x[i]), addup(x[i]),
        update(x[i], i, 1, 1, k);
    long long res = 0;
    for (int i = 1; i <= n; ++i) {
        int p = getpos(a[i], b[i] - 1, 1, 1, k);
        if (p) {
            if (cnt[p] & 1) res += a[i];
            else res += b[i];
        }
        else {
            if (getnum(b[i]) & 1) {
                if (g[i]) res += a[i];
                else res += b[i];
            }
            else {
                if (g[i]) res += b[i];
                else res += a[i];
            }
        }
    }
    cout << res;
}

Compilation message

fortune_telling2.cpp: In function 'void update(int, int, int, int, int)':
fortune_telling2.cpp:22:25: error: no matching function for call to 'max(long long int&, int&)'
     IT[k] = max(IT[k], p);
                         ^
In file included from /usr/include/c++/7/bits/char_traits.h:39:0,
                 from /usr/include/c++/7/ios:40,
                 from /usr/include/c++/7/ostream:38,
                 from /usr/include/c++/7/iostream:39,
                 from fortune_telling2.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:219:5: note: candidate: template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)
     max(const _Tp& __a, const _Tp& __b)
     ^~~
/usr/include/c++/7/bits/stl_algobase.h:219:5: note:   template argument deduction/substitution failed:
fortune_telling2.cpp:22:25: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
     IT[k] = max(IT[k], p);
                         ^
In file included from /usr/include/c++/7/bits/char_traits.h:39:0,
                 from /usr/include/c++/7/ios:40,
                 from /usr/include/c++/7/ostream:38,
                 from /usr/include/c++/7/iostream:39,
                 from fortune_telling2.cpp:1:
/usr/include/c++/7/bits/stl_algobase.h:265:5: note: candidate: template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)
     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
     ^~~
/usr/include/c++/7/bits/stl_algobase.h:265:5: note:   template argument deduction/substitution failed:
fortune_telling2.cpp:22:25: note:   deduced conflicting types for parameter 'const _Tp' ('long long int' and 'int')
     IT[k] = max(IT[k], p);
                         ^
In file included from /usr/include/c++/7/algorithm:62:0,
                 from fortune_telling2.cpp:2:
/usr/include/c++/7/bits/stl_algo.h:3462:5: note: candidate: template<class _Tp> constexpr _Tp std::max(std::initializer_list<_Tp>)
     max(initializer_list<_Tp> __l)
     ^~~
/usr/include/c++/7/bits/stl_algo.h:3462:5: note:   template argument deduction/substitution failed:
fortune_telling2.cpp:22:25: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
     IT[k] = max(IT[k], p);
                         ^
In file included from /usr/include/c++/7/algorithm:62:0,
                 from fortune_telling2.cpp:2:
/usr/include/c++/7/bits/stl_algo.h:3468:5: note: candidate: template<class _Tp, class _Compare> constexpr _Tp std::max(std::initializer_list<_Tp>, _Compare)
     max(initializer_list<_Tp> __l, _Compare __comp)
     ^~~
/usr/include/c++/7/bits/stl_algo.h:3468:5: note:   template argument deduction/substitution failed:
fortune_telling2.cpp:22:25: note:   mismatched types 'std::initializer_list<_Tp>' and 'long long int'
     IT[k] = max(IT[k], p);
                         ^