#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<unsigned long long int> szprotki; unsigned int ileszprotek; cin>>ileszprotek; for(int idszprotki=0;idszprotki<ileszprotek;idszprotki++) { unsigned long long int waga; cin>>waga; szprotki.push_back(waga); } unsigned int ileoperacji; cin>>ileoperacji; bool posortuj=true; for(int idoperacji=0;idoperacji<ileoperacji;idoperacji++) { unsigned short int typoperacji; cin>>typoperacji; switch(typoperacji) { case 1: { if(posortuj) { sort(szprotki.begin(),szprotki.end()); posortuj=false; } vector<unsigned long long int> zjedzone; unsigned long long int waga_akt; unsigned long long int waga_cel; bool fail=false; cin>>waga_akt>>waga_cel; bool obniz=false; unsigned long long int szukana=waga_akt-1; while(waga_akt<waga_cel) { if(szprotki.size()==0) { fail=true; break; } if(obniz) { obniz=false; szukana--; } else { szukana=waga_akt-1; } //cout<<"szukana:"<<szukana<<endl; if(szukana<szprotki[0]) { fail=true; break; } //cout<<"waga:"<<waga_akt<<endl; if(szprotki[szprotki.size()-1]>=szukana) { for(int element=0;element<szprotki.size();element++) { //cout<<"waga:"<<waga_akt<<endl; if(szprotki[element]==szukana) { waga_akt+=szprotki[element]; zjedzone.push_back(szprotki[element]); szprotki.erase(szprotki.begin()+element); //cout<<"waga:"<<waga_akt<<endl; break; } if(element==szprotki.size()-1) { obniz=true; } } if(waga_akt>=waga_cel) break; } else obniz=true; } if(fail) { cout<<-1<<endl; } else { cout<<zjedzone.size()<<endl; } for(int i=0;i<zjedzone.size();i++) { szprotki.push_back(zjedzone[i]); } posortuj=true; break; } case 2: { unsigned long long int waga; cin>>waga; szprotki.push_back(waga); posortuj=true; break; } case 3: { unsigned long long int waga; cin>>waga; vector<unsigned long long int>::iterator itr = find(szprotki.begin(), szprotki.end(), waga); int index = distance(szprotki.begin(), itr); szprotki.erase(szprotki.begin()+index); break; } case 4: { for(int i=0;i<szprotki.size();i++) { cout<<szprotki[i]<<endl; } break; } } } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<unsigned long long int> szprotki; unsigned int ileszprotek; cin>>ileszprotek; for(int idszprotki=0;idszprotki<ileszprotek;idszprotki++) { unsigned long long int waga; cin>>waga; szprotki.push_back(waga); } unsigned int ileoperacji; cin>>ileoperacji; bool posortuj=true; for(int idoperacji=0;idoperacji<ileoperacji;idoperacji++) { unsigned short int typoperacji; cin>>typoperacji; switch(typoperacji) { case 1: { if(posortuj) { sort(szprotki.begin(),szprotki.end()); posortuj=false; } vector<unsigned long long int> zjedzone; unsigned long long int waga_akt; unsigned long long int waga_cel; bool fail=false; cin>>waga_akt>>waga_cel; bool obniz=false; unsigned long long int szukana=waga_akt-1; while(waga_akt<waga_cel) { if(szprotki.size()==0) { fail=true; break; } if(obniz) { obniz=false; szukana--; } else { szukana=waga_akt-1; } //cout<<"szukana:"<<szukana<<endl; if(szukana<szprotki[0]) { fail=true; break; } //cout<<"waga:"<<waga_akt<<endl; if(szprotki[szprotki.size()-1]>=szukana) { for(int element=0;element<szprotki.size();element++) { //cout<<"waga:"<<waga_akt<<endl; if(szprotki[element]==szukana) { waga_akt+=szprotki[element]; zjedzone.push_back(szprotki[element]); szprotki.erase(szprotki.begin()+element); //cout<<"waga:"<<waga_akt<<endl; break; } if(element==szprotki.size()-1) { obniz=true; } } if(waga_akt>=waga_cel) break; } else obniz=true; } if(fail) { cout<<-1<<endl; } else { cout<<zjedzone.size()<<endl; } for(int i=0;i<zjedzone.size();i++) { szprotki.push_back(zjedzone[i]); } posortuj=true; break; } case 2: { unsigned long long int waga; cin>>waga; szprotki.push_back(waga); posortuj=true; break; } case 3: { unsigned long long int waga; cin>>waga; vector<unsigned long long int>::iterator itr = find(szprotki.begin(), szprotki.end(), waga); int index = distance(szprotki.begin(), itr); szprotki.erase(szprotki.begin()+index); break; } case 4: { for(int i=0;i<szprotki.size();i++) { cout<<szprotki[i]<<endl; } break; } } } return 0; } |