Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- _____ _ _ _ _
- |_ _| |__ ___ / \ _ __ ___| |__ _ _| |
- | | | '_ \ / _ \ / _ \ | '_ \/ __| '_ \| | | | |
- | | | | | | __// ___ \| | | \__ \ | | | |_| | |
- |_| |_| |_|\___/_/ \_\_| |_|___/_| |_|\__,_|_|
- */
- #include<bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- #define ll long long
- #define pb push_back
- #define ppb pop_back
- #define endl '\n'
- #define mii map<ll,ll>
- #define msi map<string,ll>
- #define mis map<ll, string>
- #define rep(i,a,b) for(ll i=a;i<b;i++)
- #define repr(i,a,b) for(ll i=b-1;i>=a;i--)
- #define trav(a, x) for(auto& a : x)
- #define pii pair<ll,ll>
- #define vi vector<ll>
- #define vii vector<pair<ll, ll>>
- #define vs vector<string>
- #define all(a) (a).begin(),(a).end()
- #define F first
- #define S second
- #define sz(x) (ll)x.size()
- #define hell 1000000007
- #define lbnd lower_bound
- #define ubnd upper_bound
- #define max(a,b) (a>b?a:b)
- #define min(a,b) (a<b?a:b)
- /* For Debugging */
- #define DEBUG cerr<<"\n>>>I'm Here<<<\n"<<endl;
- #define display(x) trav(a,x) cout<<a<<" ";cout<<endl;
- #define what_iss(x) cerr << #x << " = " << x << endl;
- #define what_is(x) cerr << #x << " = " << x << " ";
- std::mt19937_64 rng(std::chrono::steady_clock::now().time_since_epoch().count());
- #define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
- #define TIME cerr << "\nTime elapsed: " << setprecision(5) <<1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
- #define DECIMAL(n) cout << fixed ; cout << setprecision(n);
- #define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
- using namespace __gnu_pbds;
- using namespace std;
- #define PI 3.141592653589793
- #define N 100005
- class Solution {
- public:
- vector<int> ma;
- int getValue(int vl) {
- // for(auto i:ma) {
- // cout << i << " ";
- // }
- // cout << endl;
- // what_iss(vl);
- return (int)(lower_bound(ma.begin(),ma.begin(), vl) - ma.begin());
- }
- int jobScheduling(vector<int>& a, vector<int>& b, vector<int>& c) {
- int n = a.size();
- for(int i = 0; i < n; i++) {
- ma.push_back(a[i]);
- ma.push_back(b[i]);
- }
- sort(ma.begin(),ma.end());
- ma.resize(unique(ma.begin(), ma.end())-ma.begin());
- for(auto i:ma) {
- cout << i << " ";
- }
- cout << endl;
- vector<int> dp(ma.size() + 5,0);
- vector<vector<int>> v(ma.size() + 5);
- for(int i = 0; i < n; i++) {
- what_is(a[i]);
- what_iss(getValue(a[i]));
- v[getValue(a[i])].push_back(i);
- }
- // cout << ma.size() + 3 << endl;
- for(int i = ma.size() + 3; i >= 0; i--) {
- dp[i] = dp[i+1];
- for(auto j : v[i]) {
- what_is(i);
- what_is(j);
- what_iss(dp[i]);
- dp[i] = max(dp[i], c[j] + dp[getValue(b[j])]);
- }
- // what_is(i);
- // what_iss(dp[i]);
- }
- for(auto i:dp) {
- cout << i << " ";
- }
- cout << endl;
- return dp[0];
- }
- };
- void solve()
- {
- ll n;
- cin >> n;
- vector<int> a(n),b(n),c(n);
- rep(i,0,n) {
- cin >> a[i];
- }
- rep(i,0,n) {
- cin >> b[i];
- }
- rep(i,0,n) {
- cin >> c[i];
- }
- Solution tmp;
- cout << tmp.jobScheduling(a,b,c) << endl;
- return;
- }
- int main()
- {
- FAST
- int TESTS=1;
- // cin>>TESTS;
- rep(i,0,TESTS)
- {
- // cout<<"Case #"<<i+1<<": ";
- solve();
- }
- // TIME
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment