| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include <iostream>
- #include <list>
- #include <sstream>
- using namespace std;
- struct missile
- {
- int altitude;
- int length;
- list<missile>::iterator next;
- };
- int main()
- {
- int max = 0;
- list<missile> incoming;
- list<missile>::iterator longest, the_way;
- int test_cases;
- missile missile_entry;
- missile_entry.next = incoming.end();
- missile_entry.length = 1;
- string line;
- cin >> test_cases;
- cin.ignore();
- cin.ignore();
- for(int t = 0; t < test_cases; t++)
- {
- incoming.clear();
- max = 0;
- longest = incoming.end();
- while(getline(cin, line))
- {
- if(line.empty())
- break;
- istringstream iss_line(line);
- iss_line >> missile_entry.altitude;
- incoming.push_back(missile_entry);
- }
- for(auto i = incoming.end(); i != incoming.begin(); i--)
- {
- prev(i)->length = 1;
- for(auto y = i; y != incoming.end(); y++)
- {
- if((y->altitude > prev(i)->altitude) && ((y->length) >= prev(i)->length))
- {
- prev(i)->length = y->length + 1;
- prev(i)->next = y;
- }
- }
- if(prev(i)->length > max)
- {
- max = prev(i)->length;
- longest = prev(i);
- }
- }
- cout << "Max hits: " << max << endl;
- the_way = longest;
- while(the_way != incoming.end())
- {
- cout << the_way->altitude << endl;
- the_way = the_way->next;
- }
- if(t != test_cases-1)
- cout << endl;
- }
- return 0;
- }
|