Submission #737176

# Submission time Handle Problem Language Result Execution time Memory
737176 2023-05-06T17:52:12 Z Olympia Zoltan (COCI16_zoltan) C++17
63 / 140
1000 ms 13388 KB
#include <iostream>
#include <set>
#include <cmath>
#include <queue>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <cassert>
#include <map>
#include <deque>
using namespace std;
const int MX = 2e5;
int64_t lis_length[MX];
int64_t lis_number[MX];
const int MOD = 1e9 + 7;
pair<int64_t,int64_t> lis (vector<int> v, int x) {
    lis_length[0] = 1, lis_number[0] = 1;
    for (int i = 1; i < v.size(); i++) {
        lis_length[i] = 1, lis_number[i] = 1;
        for (int j = 0; j < i; j++) {
            if (v[j] < v[i]) {
                if (lis_length[j] + 1 > lis_length[i]) {
                    lis_length[i] = lis_length[j] + 1;
                    lis_number[i] = lis_number[j];
                } else if (lis_length[j] + 1 == lis_length[i]) {
                    lis_number[i] += lis_number[j];
                    lis_number[i] %= MOD;
                }
            }
        }
    }
    int64_t mx = 0, cnt = 1;
    for (int i = 0; i < v.size(); i++) {
        if (v[i] == x or x == -1) {
            if (lis_length[i] > mx) {
                mx = lis_length[i];
                cnt = lis_number[i];
            } else if (lis_length[i] == mx) {
                cnt += lis_number[i];
                cnt %= MOD;
            }
        }
    }
    return make_pair(mx, cnt);
}
pair<int64_t,int64_t> split (vector<int> v, int x) {
    vector<int> v1, v2;
    for (int i: v) {
        if (i > x) {
            v2.push_back(i);
        } else {
            v1.push_back(i);
        }
    }
    reverse(v1.begin(), v1.end());
    auto p1 = lis(v1, x);
    auto p2 = lis(v2, -1);
    return make_pair(p1.first + p2.first, (p1.second * p2.second) % MOD);
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;
    cin >> n;
    vector<int> v(n);
    set<int> s;
    s.insert(0);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
        s.insert(v[i]);
    }
    int64_t mx = 0, cnt = 0;
    for (int i: s) {
        auto p = split(v, i);
        if (p.first > mx) {
            mx = p.first, cnt = p.second;
        } else if (p.first == mx) {
            cnt += p.second, cnt %= MOD;
        }
    }
    if (cnt % 2 == 0) cnt /= 2;
    else cnt = (cnt + MOD - 1)/2 % MOD;   
    for (int i = 0; i < n - mx; i++) {
        cnt *= 2; cnt %= MOD;
    }
    cout << mx << " " << cnt << '\n';
}

Compilation message

zoltan.cpp: In function 'std::pair<long int, long int> lis(std::vector<int>, int)':
zoltan.cpp:20:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |     for (int i = 1; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
zoltan.cpp:35:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   35 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 844 ms 488 KB Output is correct
8 Correct 842 ms 432 KB Output is correct
9 Incorrect 874 ms 528 KB Output isn't correct
10 Correct 808 ms 532 KB Output is correct
11 Execution timed out 1068 ms 11044 KB Time limit exceeded
12 Execution timed out 1074 ms 9920 KB Time limit exceeded
13 Execution timed out 1067 ms 9360 KB Time limit exceeded
14 Execution timed out 1086 ms 9540 KB Time limit exceeded
15 Execution timed out 1082 ms 11688 KB Time limit exceeded
16 Execution timed out 1084 ms 13388 KB Time limit exceeded
17 Execution timed out 1081 ms 12052 KB Time limit exceeded
18 Execution timed out 1075 ms 12228 KB Time limit exceeded
19 Execution timed out 1089 ms 12088 KB Time limit exceeded
20 Execution timed out 1088 ms 12096 KB Time limit exceeded