#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
void * wmem;
char memarr[ 96000000 ] ;
template < class T> inline void walloc1d( T ** arr, int x, void ** mem = & wmem) {
static int skip[ 16 ] = { 0 , 15 , 14 , 13 , 12 , 11 , 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 } ;
( * mem) = ( void * ) ( ( ( char * ) ( * mem) ) + skip[ ( ( unsigned long long ) ( * mem) ) & 15 ] ) ;
( * arr) = ( T* ) ( * mem) ;
( * mem) = ( ( * arr) + x) ;
}
template < class T> inline void walloc1d( T ** arr, int x1, int x2, void ** mem = & wmem) {
walloc1d( arr, x2- x1, mem) ;
( * arr) - = x1;
}
template < class T1> void sortA_L( int N, T1 a[ ] , void * mem = wmem) {
sort( a, a+ N) ;
}
template < class T1, class T2> void sortA_L( int N, T1 a[ ] , T2 b[ ] , void * mem = wmem) {
int i;
pair< T1, T2> * arr;
walloc1d( & arr, N, & mem) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
arr[ i] .first = a[ i] ;
arr[ i] .second = b[ i] ;
}
sort( arr, arr+ N) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
a[ i] = arr[ i] .first ;
b[ i] = arr[ i] .second ;
}
}
template < class T> inline T popFirst( multiset< T> & a) {
T res = * ( a.begin ( ) ) ;
a.erase ( a.begin ( ) ) ;
return res;
}
template < class T> inline T getFirst( multiset< T> & a) {
return * ( a.begin ( ) ) ;
}
template < class T> inline T popFirst( set< T> & a) {
T res = * ( a.begin ( ) ) ;
a.erase ( a.begin ( ) ) ;
return res;
}
template < class T> inline T getFirst( set< T> & a) {
return * ( a.begin ( ) ) ;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
wmem = memarr;
return 0 ;
}
#undef main
int N;
int w[ 200000 ] ;
int ind[ 200000 ] ;
class Solution{
public :
vector< int > assignTasks( vector< int > & servers, vector< int > & tasks) {
int i, q;
dummy_main( ) ;
int t = 0 ;
int k;
vector< int > res;
set< int > av;
set< pair< int ,int >> chk;
N = servers.size ( ) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
w[ i] = servers[ i] ;
ind[ i] = i;
}
sortA_L( N,w,ind) ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
av.insert ( i) ;
}
for ( q= ( 0 ) ; q< ( tasks.size ( ) ) ; q++ ) {
chmax( t, q) ;
while ( chk.size ( ) && getFirst( chk) .first <= t) {
av.insert ( popFirst( chk) .second ) ;
}
if ( av.size ( ) == 0 ) {
t = getFirst( chk) .first ;
q-- ;
continue ;
}
k = popFirst( av) ;
res.push_back ( ind[ k] ) ;
chk.insert ( { t+ tasks[ q] , k} ) ;
}
return res;
}
}
;
// cLay version 20210607-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int N, w[2d5], ind[2d5];
//
// class Solution {
// public:
// vector<int> assignTasks(vector<int>& servers, vector<int>& tasks) {
// dummy_main();
//
// int t = 0, k;
// VI res;
// set<int> av;
// set<pair<int,int>> chk;
//
// N = servers.size();
// rep(i,N) w[i] = servers[i], ind[i] = i;
// sortA(N,w,ind);
// rep(i,N) av.insert(i);
//
// rep(q, tasks.size()){
// t >?= q;
// while(chk.size() && getFirst(chk).first <= t){
// av.insert(popFirst(chk).second);
// }
// if(av.size()==0) t = getFirst(chk).first, q--, continue;
// k = popFirst(av);
// res.push_back(ind[k]);
// chk.insert({t+tasks[q], k});
// }
//
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkKndtZW07CmNoYXIgbWVtYXJyWzk2MDAwMDAwXTsKdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHZvaWQgd2FsbG9jMWQoVCAqKmFyciwgaW50IHgsIHZvaWQgKiptZW0gPSAmd21lbSl7CiAgc3RhdGljIGludCBza2lwWzE2XSA9IHswLCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxfTsKICAoKm1lbSkgPSAodm9pZCopKCAoKGNoYXIqKSgqbWVtKSkgKyBza2lwWygodW5zaWduZWQgbG9uZyBsb25nKSgqbWVtKSkgJiAxNV0gKTsKICAoKmFycik9KFQqKSgqbWVtKTsKICAoKm1lbSk9KCgqYXJyKSt4KTsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCB3YWxsb2MxZChUICoqYXJyLCBpbnQgeDEsIGludCB4Miwgdm9pZCAqKm1lbSA9ICZ3bWVtKXsKICB3YWxsb2MxZChhcnIsIHgyLXgxLCBtZW0pOwogICgqYXJyKSAtPSB4MTsKfQp0ZW1wbGF0ZTxjbGFzcyBUMT4gdm9pZCBzb3J0QV9MKGludCBOLCBUMSBhW10sIHZvaWQgKm1lbSA9IHdtZW0pewogIHNvcnQoYSwgYStOKTsKfQp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+IHZvaWQgc29ydEFfTChpbnQgTiwgVDEgYVtdLCBUMiBiW10sIHZvaWQgKm1lbSA9IHdtZW0pewogIGludCBpOwogIHBhaXI8VDEsIFQyPiphcnI7CiAgd2FsbG9jMWQoJmFyciwgTiwgJm1lbSk7CiAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICBhcnJbaV0uZmlyc3QgPSBhW2ldOwogICAgYXJyW2ldLnNlY29uZCA9IGJbaV07CiAgfQogIHNvcnQoYXJyLCBhcnIrTik7CiAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICBhW2ldID0gYXJyW2ldLmZpcnN0OwogICAgYltpXSA9IGFycltpXS5zZWNvbmQ7CiAgfQp9CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIHBvcEZpcnN0KG11bHRpc2V0PFQ+ICZhKXsKICBUIHJlcyA9ICooYS5iZWdpbigpKTsKICBhLmVyYXNlKGEuYmVnaW4oKSk7CiAgcmV0dXJuIHJlczsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgVCBnZXRGaXJzdChtdWx0aXNldDxUPiAmYSl7CiAgcmV0dXJuICooYS5iZWdpbigpKTsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgVCBwb3BGaXJzdChzZXQ8VD4gJmEpewogIFQgcmVzID0gKihhLmJlZ2luKCkpOwogIGEuZXJhc2UoYS5iZWdpbigpKTsKICByZXR1cm4gcmVzOwp9CnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSBUIGdldEZpcnN0KHNldDxUPiAmYSl7CiAgcmV0dXJuICooYS5iZWdpbigpKTsKfQp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBjaG1heChTICZhLCBUIGIpewogIGlmKGE8Yil7CiAgICBhPWI7CiAgfQogIHJldHVybiBhOwp9CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgd21lbSA9IG1lbWFycjsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgTjsKaW50IHdbMjAwMDAwXTsKaW50IGluZFsyMDAwMDBdOwpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgdmVjdG9yPGludD4gYXNzaWduVGFza3ModmVjdG9yPGludD4mIHNlcnZlcnMsIHZlY3RvcjxpbnQ+JiB0YXNrcyl7CiAgICBpbnQgaSwgcTsKICAgIGR1bW15X21haW4oKTsKICAgIGludCB0ID0gMDsKICAgIGludCBrOwogICAgdmVjdG9yPGludD4gcmVzOwogICAgc2V0PGludD4gYXY7CiAgICBzZXQ8cGFpcjxpbnQsaW50Pj4gY2hrOwogICAgTiA9IHNlcnZlcnMuc2l6ZSgpOwogICAgZm9yKGk9KDApO2k8KE4pO2krKyl7CiAgICAgIHdbaV0gPSBzZXJ2ZXJzW2ldOwogICAgICBpbmRbaV0gPSBpOwogICAgfQogICAgc29ydEFfTChOLHcsaW5kKTsKICAgIGZvcihpPSgwKTtpPChOKTtpKyspewogICAgICBhdi5pbnNlcnQoaSk7CiAgICB9CiAgICBmb3IocT0oMCk7cTwodGFza3Muc2l6ZSgpKTtxKyspewogICAgICBjaG1heCh0LCBxKTsKICAgICAgd2hpbGUoY2hrLnNpemUoKSAmJiBnZXRGaXJzdChjaGspLmZpcnN0IDw9IHQpewogICAgICAgIGF2Lmluc2VydChwb3BGaXJzdChjaGspLnNlY29uZCk7CiAgICAgIH0KICAgICAgaWYoYXYuc2l6ZSgpPT0wKXsKICAgICAgICB0ID0gZ2V0Rmlyc3QoY2hrKS5maXJzdDsKICAgICAgICBxLS07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgayA9IHBvcEZpcnN0KGF2KTsKICAgICAgcmVzLnB1c2hfYmFjayhpbmRba10pOwogICAgICBjaGsuaW5zZXJ0KHt0K3Rhc2tzW3FdLCBrfSk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KfQo7Ci8vIGNMYXkgdmVyc2lvbiAyMDIxMDYwNy0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBOLCB3WzJkNV0sIGluZFsyZDVdOwovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgdmVjdG9yPGludD4gYXNzaWduVGFza3ModmVjdG9yPGludD4mIHNlcnZlcnMsIHZlY3RvcjxpbnQ+JiB0YXNrcykgewovLyAgICAgZHVtbXlfbWFpbigpOwovLyAKLy8gICAgIGludCB0ID0gMCwgazsKLy8gICAgIFZJIHJlczsKLy8gICAgIHNldDxpbnQ+IGF2OwovLyAgICAgc2V0PHBhaXI8aW50LGludD4+IGNoazsKLy8gCi8vICAgICBOID0gc2VydmVycy5zaXplKCk7Ci8vICAgICByZXAoaSxOKSB3W2ldID0gc2VydmVyc1tpXSwgaW5kW2ldID0gaTsKLy8gICAgIHNvcnRBKE4sdyxpbmQpOwovLyAgICAgcmVwKGksTikgYXYuaW5zZXJ0KGkpOwovLyAKLy8gICAgIHJlcChxLCB0YXNrcy5zaXplKCkpewovLyAgICAgICB0ID4/PSBxOwovLyAgICAgICB3aGlsZShjaGsuc2l6ZSgpICYmIGdldEZpcnN0KGNoaykuZmlyc3QgPD0gdCl7Ci8vICAgICAgICAgYXYuaW5zZXJ0KHBvcEZpcnN0KGNoaykuc2Vjb25kKTsKLy8gICAgICAgfQovLyAgICAgICBpZihhdi5zaXplKCk9PTApIHQgPSBnZXRGaXJzdChjaGspLmZpcnN0LCBxLS0sIGNvbnRpbnVlOwovLyAgICAgICBrID0gcG9wRmlyc3QoYXYpOwovLyAgICAgICByZXMucHVzaF9iYWNrKGluZFtrXSk7Ci8vICAgICAgIGNoay5pbnNlcnQoe3QrdGFza3NbcV0sIGt9KTsKLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gcmVzOwovLyAgIH0KLy8gfTsK