#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; } |
English