Jeremiah_

978F - Mentors - CF

Sep 4th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <ext/pb_ds/assoc_container.hpp>
  3.    
  4. #define all(a) a.begin(), a.end()
  5. #define F first
  6. #define S second
  7. #define $ ios::sync_with_stdio(0);
  8. #define endl "\n"
  9. #define SEEN 1
  10. //#define int long long int
  11.    
  12. using namespace std;
  13. using namespace __gnu_pbds;
  14. using ll = long long int;
  15. using ii = pair<int, int>;
  16. using vi = vector<int>;
  17. using vii = vector<ii>;
  18. using graph = vector<vii>;
  19. using ordered_mset = tree<ii, null_type, less<ii>, rb_tree_tag, tree_order_statistics_node_update>;
  20. using ordered_set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>;
  21.    
  22. mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  23.    
  24. const ll mod = 1000000007;
  25. const int INF = 0x3f3f3f3f;
  26. const int MAXN = 200050;
  27. const double pi = 3.14159265359;
  28. const double eps = 0.00000001;
  29.  
  30. //int map_skill[MAXN];
  31. int ans[MAXN];
  32.  
  33. int main() {
  34.     //ios::sync_with_stdio(0);
  35.    
  36.     int n, k;
  37.     cin >> n >> k;
  38.  
  39.     map<int, int> map_skill;
  40.     vii skill;
  41.     graph squar(n+1);
  42.    
  43.     for (int i = 1, a; i <= n; i++) {
  44.         cin >> a;
  45.         skill.push_back({a, i});
  46.     }
  47.     for (int i = 0, a,b; i < k; i++) {
  48.         //cout << i << endl;
  49.         cin >> a >> b;
  50.         // cout << "u: " << a << " v: " << b << endl;
  51.         squar[a].push_back({b, skill[b-1].first});
  52.         squar[b].push_back({a, skill[a-1].first});
  53.         // cout << a << "->" << b << ": " << skill[b-1].first << endl;
  54.         // cout << b << "->" << a << ": " << skill[a-1].first << endl;
  55.     }
  56.     //cout << "ok\n";
  57.     sort(skill.begin(), skill.end());
  58.     for(int i = 0, cur; i < n; i++) {
  59.         cur = skill[i].second;
  60.         map_skill[skill[i].first]++;
  61.         ans[cur] = i;
  62.         // cout << "ans1: " << ans[cur] << endl;
  63.         ans[cur] -= map_skill[skill[i].first]-1;
  64.         //cout << "ans2: " << ans[cur] << endl;
  65.  
  66.  
  67.         for(auto a : squar[cur]) {
  68.             if(a.second < skill[i].first)
  69.                 ans[cur]--;
  70.         }
  71.         ans[cur] = max(ans[cur], 0);
  72.  
  73.     }
  74.     //cout << "ok2\n";
  75.     for (int i = 1; i <= n; i++) {
  76.         cout << ans[i] << ' ';
  77.     }
  78.     cout << endl;
  79.  
  80.  
  81. }
Advertisement
Add Comment
Please, Sign In to add comment