제출 #219773

#제출 시각아이디문제언어결과실행 시간메모리
219773_7_7_Constellation 3 (JOI20_constellation3)C++14
100 / 100
272 ms33528 KiB
#include <bits/stdc++.h> #define int long long //#pragma GCC optimize("Ofast") //#pragma comment(linker, "/stack:200000000") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4") #define file(s) freopen(s".in","r",stdin); freopen(s".out","w",stdout); #define all(x) x.begin(), x.end() #define sz(s) (int)s.size() #define pb push_back #define ppb pop_back #define mp make_pair #define s second #define f first using namespace std; typedef pair < long long, long long > pll; typedef pair < int, int > pii; typedef unsigned long long ull; typedef vector < pii > vpii; typedef vector < int > vi; typedef long double ldb; typedef long long ll; typedef double db; const int inf = 1e9, maxn = 4e5 + 148, mod = 777777777, N = 2e5 + 61; const int dx[] = {1, -1, 0, 0}, dy[] = {0, 0, 1, -1}, block = 455; const pii base = mp(1171, 3307), Mod = mp(1e9 + 7, 1e9 + 9); const db eps = 1e-12, pi = 3.14159265359; const ll INF = 1e18; int t[N], n, h, x, y, z, m, p[N], l[N], r[N], dp[N], sum; bool was[N]; vpii gg[N]; vi g[N]; void inc (int pos, int x) { while (pos < N) { t[pos] += x; pos |= pos + 1; } } int Get (int r) { int res = 0; while (r >= 0) { res += t[r]; r = (r & (r + 1)) - 1; } return res; } int update (int l, int r, int x) { inc(l, x); inc(r + 1, -x); } int get (int v) { return v == p[v] ? v : p[v] = get(p[v]); } void merge (int v, int u) { v = get(v); u = get(u); if (r[u] - l[u] > r[v] - l[u]) swap(v, u); // cerr << " + " << l[v] << ' ' << r[v] << ' ' << dp[u] << endl; // cerr << " + " << l[u] << ' ' << r[u] << ' ' << dp[v] << endl; update(l[v], r[v], dp[u]); update(l[u], r[u], dp[v]); p[u] = v; dp[v] += dp[u]; l[v] = min(l[v], l[u]); r[v] = max(r[v], r[u]); } main () { // file(""); scanf("%lld", &n); for (int i = 1; i <= n; ++i) { scanf("%lld", &h); g[h].pb(i); } for (int i = 1; i <= n; ++i) l[i] = r[i] = p[i] = i; scanf("%lld", &m); for (int i = 1; i <= m; ++i) { scanf("%lld%lld%lld", &x, &y, &z); gg[y].pb({x, z}); sum += z; } for (int j = 1; j <= n; ++j) { for (auto i : gg[j]) dp[get(i.f)] = max(dp[get(i.f)], Get(i.f) + i.s); for (auto i : g[j]) { was[i] = 1; if (was[i - 1]) merge(i - 1, i); if (was[i + 1]) merge(i + 1, i); } /* for (int i = 1; i <= n; ++i) if (i == get(i)) cout << i << ' ' << dp[i] << endl; cout << endl; */ } int ans = 0; for (int i = 1; i <= n; ++i) ans = max(ans, dp[i]); cout << sum - ans << endl; }

컴파일 시 표준 에러 (stderr) 메시지

constellation3.cpp: In function 'long long int update(long long int, long long int, long long int)':
constellation3.cpp:63:1: warning: no return statement in function returning non-void [-Wreturn-type]
 }
 ^
constellation3.cpp: At global scope:
constellation3.cpp:90:7: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main () {
       ^
constellation3.cpp: In function 'int main()':
constellation3.cpp:92:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld", &n);
     ~~~~~^~~~~~~~~~~~
constellation3.cpp:94:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld", &h);
         ~~~~~^~~~~~~~~~~~
constellation3.cpp:101:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld", &m);
     ~~~~~^~~~~~~~~~~~
constellation3.cpp:103:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%lld%lld%lld", &x, &y, &z);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...