Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std ;
- typedef long long ll ;
- #define forn(st,en,i) for(int i = st; i < en ; i++)
- #define vi vector<int>
- #define vii vector<int, int>
- #define vli vector<long long , int >
- #define vll vector<long long , long long >
- #define pb push_back
- #define ff first
- #define ss second
- #define printV(V,n) forn(0,n,i) cout<<V[i]<<" "
- #define M 1000000007
- ll gcd(ll a, ll b){
- if(a== 0) return b ;
- return gcd(b%a,a) ;
- }
- void solve(){
- int n,m ; ll x ;
- cin>>n>>m>>x ;
- vector<pair<ll, int > > v ;
- int ans[n] ;
- forn(0,n,i){
- ll x ;
- cin>>x ;
- v.push_back({x,i}) ;
- }
- sort(v.begin(),v.end()) ;
- set<pair<ll, int > > towers ;
- ll maxi = 0 , mini = 1000000000 ;
- for(int i =0 ; i < m ; i++){
- towers.insert({v[i].first,i}) ;
- ans[v[i].second] = i ;
- maxi = max(maxi,v[i].first) ;
- mini = min(mini,v[i].first) ;
- }
- for(int i = m+1 ; i< n ; i++){
- auto it = towers.begin() ;
- pair<ll,int > p = *it ;
- ll x = p.first ; int y = p.second ;
- towers.erase(p) ;
- //cout<<x<<endl ;
- ans[v[i].second] = y ;
- towers.insert({x+v[i].first,y}) ;
- maxi = max(maxi,x+v[i].first) ;
- mini = min(mini,x+v[i].first) ;
- }
- if(maxi - mini > x) cout<<"NO"<<endl ;
- else{
- cout<<"YES"<<endl ;
- for(int i =0 ; i < n ; i++) cout<<ans[i]+1<<" " ;
- cout<<endl ;
- }
- }
- int main(){
- //ios::sync_with_stdio(false) ;
- //cin.tie(0) ;
- int tc ;
- cin>>tc ;
- //tc = 1 ;
- while(tc--){
- solve() ;
- }
- }
Add Comment
Please, Sign In to add comment