답안 #1108136

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1108136 2024-11-03T01:10:32 Z Zero_OP 사다리꼴 (balkan11_trapezoid) C++14
0 / 100
78 ms 8100 KB
#include <bits/stdc++.h>

using namespace std;

const int mod = 30013;

void add(int& x, int y){
    x += y;
    if(x >= mod) x -= mod;
}

struct Node{
    int mx, ways;
    Node(int mx = 0, int ways = 0) : mx(mx), ways(ways) {}

    friend Node operator + (const Node& a, const Node& b){
        Node c(max(a.mx, b.mx), 0);
        if(a.mx == c.mx) add(c.ways, a.ways);
        if(b.mx == c.mx) add(c.ways, b.ways);
        return c;
    }

    Node& operator += (const Node& oth){
        if(mx == oth.mx) add(ways, oth.ways);
        else if(mx < oth.mx) mx = oth.mx, ways = oth.ways;
        return *this;
    }
};

struct Fenwick{
    vector<Node> bit;
    Fenwick(int n) : bit(n + 1, Node()) {}

    void update(int id, Node v){
        for(; id < (int)bit.size(); id += id & (-id)){
            bit[id] += v;
        }
    }

    Node query(int id){
        Node ret(0, 0);
        for(; id > 0; id -= id & (-id)){
            ret += bit[id];
        }
        return ret;
    }
};

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);

#ifdef LOCAL
    freopen("task.inp", "r", stdin);
    freopen("task.out", "w", stdout);
#endif // LOCAL

    int N;
    cin >> N;

    vector<int> v;
    vector<tuple<int, int, int, int>> E;
    for(int i = 0; i < N; ++i){
        int a, b, c, d;
        cin >> a >> b >> c >> d;
        v.emplace_back(c);
        v.emplace_back(d);
        E.emplace_back(a, 0, c, i);
        E.emplace_back(b, 1, d, i);
    }

    sort(v.begin(), v.end());
    v.erase(unique(v.begin(), v.end()), v.end());
    sort(E.begin(), E.end());

    auto findPos = [&](int i){
        return lower_bound(v.begin(), v.end(), i) - v.begin() + 1;
    };

    for(auto& [x, type, pos, id] : E){
        pos = findPos(pos);
    }

    Fenwick ft(N);
    Node res(0, 0);
    vector<Node> f(N, Node(0, 0));
    for(auto [x, type, pos, id] : E){
        if(type == 0){
            Node cur = ft.query(pos - 1);
            if(cur.mx == 0) cur.ways = 1;
            ++cur.mx;

            f[id] = cur;
        } else{
            ft.update(pos, f[id]);
        }
    }

    for(int i = 0; i < N; ++i){
        res += f[i];
//        cout << f[i].mx << ' ' << f[i].ways << '\n';
    }

    cout << res.mx << ' ' << res.ways << '\n';

    return 0;
}

Compilation message

trapezoid.cpp: In function 'int main()':
trapezoid.cpp:79:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   79 |     for(auto& [x, type, pos, id] : E){
      |               ^
trapezoid.cpp:86:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   86 |     for(auto [x, type, pos, id] : E){
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 336 KB Output isn't correct
2 Incorrect 1 ms 336 KB Output isn't correct
3 Incorrect 1 ms 336 KB Output isn't correct
4 Incorrect 1 ms 336 KB Output isn't correct
5 Incorrect 2 ms 504 KB Output isn't correct
6 Incorrect 3 ms 592 KB Output isn't correct
7 Incorrect 3 ms 592 KB Output isn't correct
8 Incorrect 4 ms 848 KB Output isn't correct
9 Incorrect 7 ms 1104 KB Output isn't correct
10 Incorrect 13 ms 1868 KB Output isn't correct
11 Incorrect 17 ms 1880 KB Output isn't correct
12 Incorrect 33 ms 4168 KB Output isn't correct
13 Incorrect 40 ms 4168 KB Output isn't correct
14 Incorrect 48 ms 8100 KB Output isn't correct
15 Incorrect 53 ms 8004 KB Output isn't correct
16 Incorrect 58 ms 8004 KB Output isn't correct
17 Incorrect 57 ms 8004 KB Output isn't correct
18 Incorrect 52 ms 8004 KB Output isn't correct
19 Incorrect 63 ms 8004 KB Output isn't correct
20 Incorrect 78 ms 8008 KB Output isn't correct