Guest User

Problem C

a guest
May 2nd, 2021
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.48 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std ;
  3.  
  4. typedef long long ll ;
  5.  
  6. #define forn(st,en,i) for(int i = st; i < en ; i++)
  7. #define vi vector<int>
  8. #define vii vector<int, int>
  9. #define vli vector<long long , int >
  10. #define vll vector<long long , long long >
  11. #define pb push_back
  12. #define ff first
  13. #define ss second
  14. #define printV(V,n) forn(0,n,i) cout<<V[i]<<" "
  15.  
  16. #define M 1000000007
  17.  
  18. ll gcd(ll a, ll b){
  19. if(a== 0) return b ;
  20. return gcd(b%a,a) ;
  21. }
  22.  
  23. void solve(){
  24. int n,m ; ll x ;
  25. cin>>n>>m>>x ;
  26. vector<pair<ll, int > > v ;
  27. int ans[n] ;
  28. forn(0,n,i){
  29. ll x ;
  30. cin>>x ;
  31. v.push_back({x,i}) ;
  32. }
  33. sort(v.begin(),v.end()) ;
  34. set<pair<ll, int > > towers ;
  35. ll maxi = 0 , mini = 1000000000 ;
  36. for(int i =0 ; i < m ; i++){
  37. towers.insert({v[i].first,i}) ;
  38. ans[v[i].second] = i ;
  39. maxi = max(maxi,v[i].first) ;
  40. mini = min(mini,v[i].first) ;
  41. }
  42. for(int i = m+1 ; i< n ; i++){
  43. auto it = towers.begin() ;
  44. pair<ll,int > p = *it ;
  45. ll x = p.first ; int y = p.second ;
  46. towers.erase(p) ;
  47. //cout<<x<<endl ;
  48. ans[v[i].second] = y ;
  49. towers.insert({x+v[i].first,y}) ;
  50. maxi = max(maxi,x+v[i].first) ;
  51. mini = min(mini,x+v[i].first) ;
  52. }
  53. if(maxi - mini > x) cout<<"NO"<<endl ;
  54. else{
  55. cout<<"YES"<<endl ;
  56. for(int i =0 ; i < n ; i++) cout<<ans[i]+1<<" " ;
  57. cout<<endl ;
  58. }
  59. }
  60.  
  61. int main(){
  62. //ios::sync_with_stdio(false) ;
  63. //cin.tie(0) ;
  64. int tc ;
  65. cin>>tc ;
  66. //tc = 1 ;
  67. while(tc--){
  68. solve() ;
  69. }
  70. }
  71.  
  72.  
Add Comment
Please, Sign In to add comment