Submission #1238566

#TimeUsernameProblemLanguageResultExecution timeMemory
1238566nlsosadFortune Telling 2 (JOI14_fortune_telling2)C++20
100 / 100
1269 ms80640 KiB
#include <bits/stdc++.h> using ll = long long; #include <ext/pb_ds/assoc_container.hpp> // #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; typedef tree<pair<ll, ll>, null_type, less<pair<ll, ll>>, rb_tree_tag, tree_order_statistics_node_update> iset; #define f first #define s second ll a[200001], b[200001]; ll oa[200001], ob[200001]; pair<ll, ll> t[200001], ot[200001]; ll luu[200001]; ll res[200001]; vector<pair<ll, ll>> tam[200002]; struct segtree{ ll n; vector<ll> tr; segtree(ll m){ n = m; tr.resize(4*n); } void build(ll node, ll start, ll end){ if(start==end){ tr[node] = luu[end]; }else{ ll mid = (start+end)/2; build(2*node, start, mid); build(2*node+1, mid+1, end); tr[node] = max(tr[2*node], tr[2*node+1]); } } ll query(ll node, ll start, ll end, ll l, ll r){ if(start > r or end < l){ return 0; } if(l<=start and end <= r){ return tr[node]; } ll mid = (start+end)/2; return max(query(2*node, start, mid, l, r), query(2*node+1, mid+1, end, l, r)); } }; signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll n, k; cin >> n >> k; map<ll,ll> mp; for (ll i = 1;i<=n;++i){ cin >> a[i] >> b[i]; oa[i] = a[i], ob[i] = b[i]; mp[a[i]] = -1; } for (ll i = 1;i<=n;++i){ mp[b[i]] = -1; } for (ll i = 1;i<=k;++i){ cin >> t[i].f; ot[i].f = t[i].f; t[i].s = i; mp[t[i].f] = -1; } ll moc = 1; for (auto &i:mp){ i.second = moc++; } for (ll i= 1;i<=n;++i){ a[i] = mp[a[i]]; b[i] = mp[b[i]]; } for (ll i = 1;i<=k;++i){ t[i].f = mp[t[i].f]; } sort(t+1, t+k+1); for (ll i = 1;i<=k;++i){ luu[i] = t[i].s; } segtree st(k); st.build(1, 1, k); // cout << st.query(1, 1, k, 1, 1);return 0; for (ll i = 1;i<=n;++i){ res[i] = oa[i]; ll dau = lower_bound(t+1, t+k+1, make_pair(min(a[i], b[i]), (ll)-1)) - t; ll cuoi = lower_bound(t+1, t+k+1, make_pair(max(a[i], b[i]), (ll)-1)) - t; // cout << dau << ' ' << cuoi << '\n'; cuoi--; ll tmp = st.query(1, 1, k, dau, cuoi); if(tmp!=0){ if(oa[i]<ob[i]){ res[i] = ob[i]; tam[tmp+1].push_back({ob[i], i}); }else{ tam[tmp+1].push_back({oa[i], i}); } }else{ tam[1].push_back({max(oa[i], ob[i]), i}); } } iset s; for (ll i = k;i>=1;--i){ pair<ll, ll> l = make_pair(ot[i].f, i); s.insert(l); for (auto [v, id]:tam[i]){ // cout << v << ' ' << id << ' ' << i << '\n'; ll cnt = s.size()-s.order_of_key(make_pair(v, -1)); // cout << cnt << '\n'; cnt %= 2; if(cnt==1){ if(res[id]==oa[id])res[id] = ob[id]; else res[id] = oa[id]; } } } /*for (ll i = 1;i<=k;++i){ cout << t[i].f << } ll sol = 0; for (ll i = 1;i<=n;++i){ cout << a[i] << ' '; } cout << '\n'; for (ll i = 1;i<=n;++i){ cout << b[i] << ' '; } cout << '\n';*/ long long sol = 0; for (ll i = 1;i<=n;++i){ sol += res[i]; // cout << res[i] << ' '; } cout << sol; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...