Advertisement
MinhNGUYEN2k4

Untitled

Sep 4th, 2021
951
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. //Nguyen Huu Hoang Minh
  2. #include <bits/stdc++.h>
  3. #define sz(x) int(x.size())
  4. #define all(x) x.begin(),x.end()
  5. #define reset(x) memset(x, 0,sizeof(x))
  6. #define pb push_back
  7. #define mp make_pair
  8. #define fi first
  9. #define se second
  10. #define N 100005
  11. #define remain(x) if (x > MOD) x -= MOD
  12. #define ii pair<int, int>
  13. #define iiii pair< ii , ii >
  14. #define viiii vector< iiii >
  15. #define vi vector<int>
  16. #define vii vector< ii >
  17. #define bit(x, i) (((x) >> (i)) & 1)
  18. #define Task "test"
  19. #define int long long
  20.  
  21. using namespace std;
  22.  
  23. typedef long double ld;
  24. const int inf = 1e10;
  25. const int minf = -1e10;
  26.  
  27. int n;
  28. struct da{
  29.     int val, id;
  30. };
  31. struct db{
  32.     int val, pri, id;
  33. };
  34. da a[N];
  35. db b[N];
  36.  
  37. bool cmp1(da a, da b){
  38.     return a.val < b.val;
  39. }
  40.  
  41. bool cmp2(db a, db b){
  42.     return a.val < b.val;
  43. }
  44.  
  45. void readfile()
  46. {
  47.     ios_base::sync_with_stdio(false);
  48.     cin.tie(0);cout.tie(0);
  49.     if (fopen(Task".inp","r"))
  50.     {
  51.         freopen(Task".inp","r",stdin);
  52.         //freopen(Task".out","w",stdout);
  53.     }
  54.     cin >> n;
  55.     for(int i=1; i<=n; i++){
  56.         cin >> a[i].val;
  57.         a[i].id = i;
  58.     }
  59.     for(int i=1; i<=n; i++){
  60.         cin >> b[i].val >> b[i].pri;
  61.         b[i].id = i;
  62.     }
  63.     sort(a+1,a+1+n,cmp1);
  64.     sort(b+1,b+1+n,cmp2);
  65. }
  66.  
  67. int res[N];
  68.  
  69. void proc()
  70. {
  71.     priority_queue<ii> q;
  72.     memset(res, -1, sizeof res);
  73.     int cur = n;
  74.     int ans = 0;
  75.     for(int i=n; i>=1; i--){
  76.         while (cur>=1 && b[cur].val >= a[i].val){
  77.             q.push(ii(b[cur].pri,b[cur].id));
  78.             cur--;
  79.         }
  80.         if (q.size()){
  81.             ii tmp = q.top(); q.pop();
  82.             res[a[i].id] = tmp.se;
  83.             ans+=tmp.fi;
  84.         }
  85.     }
  86.     vector<int> pos;
  87.     vector<bool> ap(n+1,false);
  88.     for(int i=1; i<=n; i++) if (res[i]==-1) pos.pb(i);
  89.     for(int i=1; i<=n; i++) if (res[i]!=-1) ap[res[i]]=true;
  90.     int Cur = 0;
  91.     for(int i=1; i<=n; i++){
  92.         if (ap[i]==false){
  93.             res[pos[Cur]] = i;
  94.             Cur++;
  95.         }
  96.     }
  97.     cout << ans << '\n';
  98.     for(int i=1; i<=n; i++) cout << res[i] << ' ';
  99. }
  100.  
  101. signed main()
  102. {
  103.     readfile();
  104.     proc();
  105.     return 0;
  106. }
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement