/* Stars in the sky, floating in darkness, soon I will fly faster than Light. See through my eyes, time standing down, onward to space, engines stand by. Sense loss of time Nebula’s blurring, lights flashing by Worlds Unknown. Imminent approach, sensors reacting, soon I’m through faster Than Light. Suddenly stop Readings come in, nothing in sight Sun glowing bright. */ #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("avx2,fma") #include<map> #include<cstdio> #include<iostream> #include<algorithm> #define LL long long #define ULL unsigned long long usingnamespace std; constint MAXN = 1e5 + 5; constint INF = 0x3f3f3f3f;
template <typename T> inlinevoidread(T& x){ x = 0; int f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -f; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); } x *= f; } template <typename T, typename... Args> inlinevoidread(T &x, Args&... Arg){ read (x), read (Arg...); } template <typename T> inline T Abs(T x){ return x < 0 ? -x : x; } template <typename T> inline T Max(T x, T y){ return x > y ? x : y; } template <typename T> inline T Min(T x, T y){ return x < y ? x : y; }
int n, len, cnt, a[MAXN], b[MAXN]; LL res;
intind(int x){ returnupper_bound(b, b + len + 1, x) - b; } structCartesianTree { int sta[MAXN], tp, root; structNode { int l, r; } s[MAXN << 2]; voidbuild(int n, int val[]){ int maxl = -INF; val[sta[tp]] = INF; for (int i = 1; i <= n; i++) { bool flag = false; if (val[i] > maxl) maxl = val[i], root = i; while (val[i] > val[sta[tp]]) tp--, flag = true; s[sta[tp]].r = i; if (flag) s[i].l = sta[tp + 1]; sta[++tp] = i; } } } ct; structFenwickTree { int s[MAXN]; intlowbit(int x){ return x & -x; } voidupdate(int pos, int delta){ for (int i = pos; i <= n; i += lowbit(i)) s[i] += delta; } intquery(int pos){ int res = 0; for (int i = pos; i; i -= lowbit(i)) res += s[i]; return res; } } ft;
voidoperate(int l, int r, int u, int opt){ for (int i = l; i <= r; i++) { int pos = ind(b[a[u]] / b[a[i]]); if (pos) res += opt * ft.query(pos - 1); } } voiddfs(int u, int l, int r){ if (u == 0) return; if (u - l > r - u) operate(u, r, u, -1), dfs(ct.s[u].l, l, u - 1), ft.update(a[u], 1), operate(u, r, u, +1), dfs(ct.s[u].r, u + 1, r); elseoperate(l, u, u, -1), dfs(ct.s[u].r, u + 1, r), ft.update(a[u], 1), operate(l, u, u, +1), dfs(ct.s[u].l, l, u - 1); }
intmain(){
read(n); for (int i = 1; i <= n; i++) read(a[i]), b[i] = a[i];
sort(b + 1, b + 1 + n), len = unique(b + 1, b + 1 + n) - b - 1; for (int i = 1; i <= n; i++) a[i] = lower_bound(b + 1, b + 1 + len, a[i]) - b;
/* 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 昭和20年 僕は死んだ 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 僕は死んだ 昭和20年 She never woke up 僕は死んだ She never woke up She never woke up September 21st 節子は September 21st She never woke up September 21st,1945,that was the night I died */ #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("avx2,fma") #include<cstdio> #include<iostream> #include<algorithm> #define LL long long #define ULL unsigned long long usingnamespace std; constint MAXN = 1e6 + 5;
template <typename T> inlinevoidread(T& x){ x = 0; int f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -f; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); } x *= f; } template <typename T, typename... Args> inlinevoidread(T &x, Args&... Arg){ read (x), read (Arg...); } template <typename T> inline T Abs(T x){ return x < 0 ? -x : x; } template <typename T> inline T Max(T x, T y){ return x > y ? x : y; } template <typename T> inline T Min(T x, T y){ return x < y ? x : y; }
int n, head, tail, q[MAXN]; structPoint { LL x, y, w; } a[MAXN]; LL res, dp[MAXN];
/* 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 昭和20年 僕は死んだ 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 僕は死んだ 昭和20年 She never woke up 僕は死んだ She never woke up She never woke up September 21st 節子は September 21st She never woke up September 21st,1945,that was the night I died */ #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("avx2,fma") #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define LL long long #define ULL unsigned long long usingnamespace std; constint MAXM = 8; constint Mod = 1e9 + 7;
template <typename T> inlinevoidread(T& x){ x = 0; int f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -f; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); } x *= f; } template <typename T, typename... Args> inlinevoidread(T &x, Args&... Arg){ read (x), read (Arg...); } template <typename T> inline T Abs(T x){ return x < 0 ? -x : x; } template <typename T> inline T Max(T x, T y){ return x > y ? x : y; } template <typename T> inline T Min(T x, T y){ return x < y ? x : y; }
int n, k, m, tot;
structMatrix { LL a[1 << MAXM][1 << MAXM]; Matrix operator * (const Matrix& oth) const { Matrix res; memset(res.a, 0, sizeof(res.a)); for (int i = 0; i <= tot; i++) for (int j = 0; j <= tot; j++) for (int k = 0; k <= tot; k++) res.a[i][j] = (res.a[i][j] + a[i][k] * oth.a[k][j] % Mod) % Mod; return res; } } f, ans;
intmain(){
read(n, k, m), tot = k << m; for (int i = 0; i < k; i++) { for (int s = 0; s < (1 << m); s++) { int nxt = (s << 1) & ((1 << m) - 1); int cnt = __builtin_popcount(s) + 1; f.a[(i << m) + s][(i << m) + nxt] = 1; if (i == k - 1) f.a[(i << m) + s][tot] = cnt; else f.a[(i << m) + s][((i + 1) << m) + nxt + 1] = cnt; } } ans.a[0][0] = 1, f.a[tot][tot] = 1; while (n) { if (n & 1) ans = ans * f; f = f * f; n >>= 1; } printf("%lld\n", ans.a[0][tot]);
/* 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 昭和20年 僕は死んだ 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 僕は死んだ 昭和20年 She never woke up 僕は死んだ She never woke up She never woke up September 21st 節子は September 21st She never woke up September 21st,1945,that was the night I died */ #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("avx2,fma") #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define int long long #define LL long long #define ULL unsigned long long usingnamespace std; constint MAXN = 2e3 + 5;
template <typename T> inlinevoidread(T& x){ x = 0; int f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -f; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); } x *= f; } template <typename T, typename... Args> inlinevoidread(T &x, Args&... Arg){ read (x), read (Arg...); } template <typename T> inline T Abs(T x){ return x < 0 ? -x : x; } template <typename T> inline T Max(T x, T y){ return x > y ? x : y; } template <typename T> inline T Min(T x, T y){ return x < y ? x : y; }
int n, m, p, a[MAXN], c[MAXN], dp[MAXN][MAXN], sum[MAXN][MAXN], res;
voiddfs(int pos, int l, int r, int ql, int qr){ if (l > r) return; int mid = (l + r) >> 1, k = 0; for (int i = ql; i < mid - 1; i++) { if (dp[pos - 1][i] + sum[i + 1][mid - 1] + p > dp[pos][mid]) dp[pos][mid] = dp[pos - 1][i] + sum[i + 1][mid - 1] + p, k = i; } dfs(pos, l, mid - 1, ql, k), dfs(pos, mid + 1, r, k, qr); }
signedmain(){
read(n, m, p); for (int i = 1; i <= n; i++) read(a[i]); for (int i = 1; i <= n; i++) read(c[i]);
memset(dp, 0xcf, sizeof(dp)); dp[0][0] = 0; for (int l = 1; l <= n; l++) for (int r = l; r <= n; r++) sum[l][r] = sum[l][r - 1] + a[r] * c[r - l + 1];
for (int i = 1; i <= n + 1; i++) { dfs(i, i + 1, n + 1, i - 1, n - 1); for (int j = i; j <= n + 1; j++) dp[i][j] = Max(dp[i][j], dp[i - 1][j - 1]); if (n + 1 - i <= m) res = Max(res, dp[i][n + 1]); }
/* 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 昭和20年 僕は死んだ 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 僕は死んだ 昭和20年 She never woke up 僕は死んだ She never woke up She never woke up September 21st 節子は September 21st She never woke up September 21st,1945,that was the night I died */ #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("avx2,fma") #include<cstdio> #include<iostream> #include<algorithm> #define LL long long #define ULL unsigned long long #define int long long usingnamespace std; constint MAXN = 2e2 + 5; const LL INF = 1e18;
template <typename T> inlinevoidread(T& x){ x = 0; int f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -f; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); } x *= f; } template <typename T, typename... Args> inlinevoidread(T &x, Args&... Arg){ read (x), read (Arg...); } template <typename T> inline T Abs(T x){ return x < 0 ? -x : x; } template <typename T> inline T Max(T x, T y){ return x > y ? x : y; } template <typename T> inline T Min(T x, T y){ return x < y ? x : y; }
int n, m; LL dp[MAXN][MAXN][MAXN], a[MAXN], pre[MAXN], g[MAXN][MAXN][MAXN]; bool vis[MAXN][MAXN][MAXN], mp[MAXN][MAXN][MAXN];
LL dfs(int dep, int l, int r){ if (l > r) return0; if (!dep) return l == r ? 0 : -INF; if (r - l + 1 > (1ll << dep)) return -INF; if (vis[dep][l][r]) return dp[dep][l][r]; vis[dep][l][r] = 1, dp[dep][l][r] = -INF; for (int i = l - 1; i <= r; i++) dp[dep][l][r] = Max(dp[dep][l][r], dfs(dep - 1, l, i) + dfs(dep - 1, i + 1, r) + pre[r] - pre[i]); return dp[dep][l][r]; } LL query(int dep, int l, int r){ if (l > r) return0; if (!dep) return l == r ? 0 : -INF; if (mp[dep][l][r]) return g[dep][l][r]; mp[dep][l][r] = 1, g[dep][l][r] = -INF; if ((m >> (dep - 1)) & 1) { for (int i = l - 1; i <= r; i++) g[dep][l][r] = Max(g[dep][l][r], dfs(dep - 1, l, i) + query(dep - 1, i + 1, r) + pre[r] - pre[i]); return g[dep][l][r]; } elsereturn g[dep][l][r] = query(dep - 1, l, r); }
signedmain(){
read(n, m); for (int i = 1; i <= n; i++) read(a[i]), pre[i] = pre[i - 1] + a[i]; LL tmp = m, dep = 0; while (tmp) dep++, tmp >>= 1ll;
/* 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 昭和20年 僕は死んだ 節子は そのまま目を覚まさなかった 昭和20年9月21日夜 僕は死んだ 僕は死んだ 昭和20年 She never woke up 僕は死んだ She never woke up She never woke up September 21st 節子は September 21st She never woke up September 21st,1945,that was the night I died */ #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("avx2,fma") #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define LL long long #define ULL unsigned long long usingnamespace std; constint MAXN = 55; constint MAXM = 1e2 + 5; constint siz = 1e2; constint INF = 0x3f3f3f3f;
template <typename T> inlinevoidread(T& x){ x = 0; int f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -f; c = getchar(); } while (c >= '0' && c <= '9') { x = (x << 3) + (x << 1) + (c ^ 48), c = getchar(); } x *= f; } template <typename T, typename... Args> inlinevoidread(T &x, Args&... Arg){ read (x), read (Arg...); } template <typename T> inline T Abs(T x){ return x < 0 ? -x : x; } template <typename T> inline T Max(T x, T y){ return x > y ? x : y; } template <typename T> inline T Min(T x, T y){ return x < y ? x : y; }
int t, n, m, q, d[MAXN][MAXN], dis[MAXN][MAXN], dp[MAXM][MAXN][MAXN], dp1[MAXM][MAXN][MAXN], dp2[MAXM][MAXN][MAXN];
intmain(){
read(t); while (t--) {
read(n, m); memset(d, 0x3f, sizeof(d)); for (int i = 1, u, v, w; i <= m; i++) read(u, v, w), d[u][v] = Min(d[u][v], w);
memset(dp, 0x3f, sizeof(dp)); for (int i = 1; i <= n; i++) dp[0][i][i] = 0; for (int k = 1; k <= siz; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) for (int l = 1; l <= n; l++) dp[k][i][j] = Min(dp[k][i][j], dp[k - 1][i][l] + d[l][j]);
memset(dp1, 0x3f, sizeof(dp1)); for (int i = 1; i <= n; i++) dp1[0][i][i] = 0; for (int k = 1; k <= siz; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) for (int l = 1; l <= n; l++) dp1[k][i][j] = Min(dp1[k][i][j], dp1[k - 1][i][l] + dp[siz][l][j]);
memset(dis, 0x3f, sizeof(dis)); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) dis[i][j] = d[i][j]; for (int i = 1; i <= n; i++) dis[i][i] = 0; for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) dis[i][j] = Min(dis[i][j], dis[i][k] + dis[k][j]);
memset(dp2, 0x3f, sizeof(dp2)); for (int k = 0; k <= siz; k++) for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) for (int l = 1; l <= n; l++) dp2[k][i][j] = Min(dp2[k][i][j], dp[k][i][l] + dis[l][j]);
read(q); for (int i = 1, u, v, k; i <= q; i++) { read(u, v, k); int ind1 = k / siz, ind2 = k % siz, res = INF; for (int l = 1; l <= n; l++) res = Min(res, dp1[ind1][u][l] + dp2[ind2][l][v]); if (res == INF) printf("-1\n"); elseprintf("%d\n", res); }
}
return0; }
The End
「Ô mon âme, n'aspire pas à la vie immortelle, mais épuise le champ du possible.」