/* [NWERC'07] ASSEMBLE by: Jan Kuipers */ using namespace std; #include #include #include #include #include struct component { int qual, price; component (int qual, int price): qual(qual), price(price) {} }; bool operator < (component a, component b) { if (a.qual !=b.qual) return a.qual b.price; } int main () { int runs; cin>>runs; while (runs--) { int N, C=0, budget; cin>>N>>budget; map typenum; vector > comp; vector > comp2; for (int i=0; i>type>>name>>price>>qual; if (!typenum.count(type)) { typenum[type] = C++; comp.push_back(vector()); } comp[typenum[type]].push_back(component(qual,price)); } for (int i=0; i0 && comp[i][j].price<=comp[i][idx-1].price) idx--; comp[i][idx++] = comp[i][j]; } comp2.push_back(set(comp[i].begin(),comp[i].begin()+idx)); } int minqual=0, maxqual=INT_MAX; for (int i=0; iprice; if (price>budget) maxqual = tryqual-1; else minqual = tryqual; } cout<