long long query( int node, int left, int right) { if ( start[node] == finish[node] ) { return value[node]; } if ( left == start[node] && right == finish[node] ) { return value[node]; } long long result = 0l; if ( left <= middle[node] ) { result += query(node*2, left, miN(middle[node], right)); } if ( right >= middle[node] +1 ) { result += query(node*2+1, maX(left, middle[node]+1), right); } return result; }
long long setV(int node, int left, int right, int v) { long long change; if ( start[node] == finish[node] ) { arr[start[node]-1] = v; change = value[node]; value[node] = (long long)(v); value[node] *= value[node]; return -change + value[node]; } change = 0l; if ( left <= middle[node]) { change += setV(node*2, left, miN(middle[node], right), v ); } if ( right >= middle[node] +1 ) { change += setV(node*2+1, maX(middle[node]+1 , left),right, v ); } value[node] += change; return change; }
void solve() { for(u = 0; u < 55; u++) car[u] = -1; wait = 0, completed = 0; //cin >> N >> M >> wait >> p >> r >> k; N = readInt(); M = readInt(); wait = readInt(); p = readInt(); r = readInt(); k = readInt(); //Sf("%d %d %d %d %d %d", &N, &M, &wait, &p, &r, &k); for(u = 0; u < miN(wait, N); u++) { // forn(i, miN(wait, N)) { car[u] = 0; wait--; } for(i = 1; i <= k; i++) { if(M > 0 && i % r == 0) { M--; wait++; } for(j = 0; j < N; j++) { if(car[j] > -1) { car[j]++; } if(car[j] == p) { car[j] = -1; completed++; } if(wait > 0 && car[j] == -1) { wait--; car[j] = 0; } } /* for(j = 0; j < N; j++) if(car[j] == p) { // forn(j, N) if(car[j] == p) { car[j] = -1; completed++; } */ /* //forn(j, N) if(wait > 0 && car[j] == -1) { for(j = 0; j< N; j++) if(wait > 0 && car[j] == -1) { wait--; car[j] = 0; } */ } cnt = 0; for(i = 0; i < N; i++) // forn(i, N) if(car[i] == -1) cnt++; Pf("%d %d %d %d\n", cnt, completed, M, wait); }