답안 #243482

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
243482 2020-07-01T08:56:48 Z ne4eHbKa Zoltan (COCI16_zoltan) C++17
70 / 140
1000 ms 2680 KB
//{ <defines>
#include <bits/stdc++.h>
using namespace std;

//#pragma comment(linker, "/stack:200000000")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,-O3")

#define fr(i, n) for(int i = 0; i < n; ++i)
#define fo(n) fr(i, n)

#define re return
#define ef else if
#define ifn(x) if(!(x))
#define _  << ' ' <<

#define ft first
#define sd second
#define ve vector
#define pb push_back
#define eb emplace_back

#define sz(x) int((x).size())
#define bnd(x) x.begin(), x.end()
#define clr(x, y) memset((x), (y), sizeof (x))

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef ve<int> vi;

inline ll time() {re chrono :: system_clock().now().time_since_epoch().count();}
mt19937 rnd(time());
mt19937_64 RND(time());

template<typename t> inline void umin(t &a, t b) {a = min(a, b);}
template<typename t> inline void umax(t &a, t b) {a = max(a, b);}

int md = 998244353;

inline int m_add(int&a, int b) {a += b; if(a < 0) a += md; if(a >= md) a -= md; re a;}
inline int m_sum(int a, int b) {a += b; if(a < 0) a += md; if(a >= md) a -= md; re a;}
inline int m_mul(int&a, int b) {re a = 1ll * a * b % md;}
inline int m_prod(int a, int b) {re 1ll * a * b % md;}

int m_bpow(ll A, ll b) {
    int a = A % md;
    ll ans = 1;
    for(ll p = 1ll << 63 - __builtin_clzll(b); p; p >>= 1) {
        (ans *= ans) %= md;
        if(p & b)
            (ans *= a) %= md;
    }
    re ans;
}

//const ld pi = arg(complex<ld>(-1, 0));
//const ld pi2 = pi + pi;
const int oo = 2e9;
const ll OO = 4e18;
//} </defines>
const int N = 2e5 + 5;

int n, m;
int a[N], p2[N];
pii le[N], gr[N];

void solve() {
    md = 1e9 + 7;
    for(int i = 0; i < N; ++i) p2[i] = !i ? 1 : m_sum(p2[i - 1], p2[i - 1]);
    cin >> n;
    fo(n) cin >> a[i];
//    map<int, int> sh;
//    fo(n) sh[a[i]];
//    m = 0;
//    for(auto &i : sh) i.sd = ++m;
//    fo(n) a[i] = sh[a[i]];
    int M = 1;
    for(int i = n - 1; ~i; --i) {
        le[i] = gr[i] = {1, 1};
        for(int j = i + 1; j < n; ++j) {
            if(a[j] < a[i] && le[j].ft + 1 >= le[i].ft) {
                if(le[j].ft + 1 == le[i].ft) {
                    m_add(le[i].sd, le[j].sd);
                } else {
                    le[i] = le[j];
                    le[i].ft++;
                }
            }
            if(a[j] > a[i] && gr[j].ft + 1 >= gr[i].ft) {
                if(gr[j].ft + 1 == gr[i].ft) {
                    m_add(gr[i].sd, gr[j].sd);
                } else {
                    gr[i] = gr[j];
                    gr[i].ft++;
                }
            }
        }
        umax(M, le[i].ft + gr[i].ft - 1);
    }
    int ans = 0;
    for(int i = 0; i < n; ++i) {
        if(le[i].ft + gr[i].ft < M + 1) continue;
        m_add(ans, m_prod(p2[n - M], m_prod(le[i].sd, gr[i].sd)));
    }
    cout << M _ ans << endl;
}

int main() {
    cout.precision(15); cout << fixed;
    cerr.precision(15); cerr << fixed;
#ifdef _LOCAL
    freopen("in.txt", "r", stdin);
    int tests; cin >> tests;
    for(int test = 1; test <= tests; ++test) {
		cerr << "case #" << test << endl;
        solve();
        cerr << endl;
    }
#else
//    freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
    ios_base :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
    solve();
#endif
    return 0;
}

Compilation message

zoltan.cpp: In function 'int m_bpow(ll, ll)':
zoltan.cpp:50:26: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
     for(ll p = 1ll << 63 - __builtin_clzll(b); p; p >>= 1) {
                       ~~~^~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 1152 KB Output is correct
2 Correct 6 ms 1152 KB Output is correct
3 Correct 6 ms 1152 KB Output is correct
4 Correct 6 ms 1152 KB Output is correct
5 Correct 6 ms 1152 KB Output is correct
6 Correct 6 ms 1152 KB Output is correct
7 Correct 8 ms 1152 KB Output is correct
8 Correct 7 ms 1152 KB Output is correct
9 Correct 7 ms 1152 KB Output is correct
10 Correct 8 ms 1152 KB Output is correct
11 Execution timed out 1095 ms 2188 KB Time limit exceeded
12 Execution timed out 1089 ms 2448 KB Time limit exceeded
13 Execution timed out 1090 ms 2296 KB Time limit exceeded
14 Execution timed out 1098 ms 2168 KB Time limit exceeded
15 Execution timed out 1088 ms 2328 KB Time limit exceeded
16 Execution timed out 1076 ms 2604 KB Time limit exceeded
17 Execution timed out 1095 ms 2680 KB Time limit exceeded
18 Execution timed out 1081 ms 2660 KB Time limit exceeded
19 Execution timed out 1089 ms 2560 KB Time limit exceeded
20 Execution timed out 1091 ms 2552 KB Time limit exceeded