5506 | 2023-07-04 00:08:07 | Andros | Kártyajáték | cpp17 | Forditási hiba |
#include <iostream>
#include <vector>
#define ll long long
//Oktatas.hu-rol ujrairva
//Magyarazattal
//Van egy talan erthetobb megoldas feltoltve,
//csak idolimit tullepes, mert kellenek az iteratoros magiak, hogy gyors legyen
//termeszetesen oktatas.hu-rol
using namespace std;
int main()
{
ll n, k;
cin >> n >> k;
vector<ll> hand(k);//Osszes kartya
//Beolvasas
for (int i = 0; i < k; i++)
{
cin >> hand[i];
}
vector<ll> pontszerzok;
//Ebbe lesznek belerakva a kartyak, amik szerezhettek pontot, de nem biztos hogy szerztek.
//A hand tomb azon elemei lesznek benne a vegen, amik elott nem volt nagyobb kartya.
//Pl 1 8 3 15 4 20 sorozat vegen a 20-as szerezhetne pontot, ha lenne ott egy 16-os
vector<bool> pont(k);//Egy-egy kartya adott-e pontot
for (ll card : hand) {
//Visszaadja a helyet az elso `card`-nal nagyobb szamnak a pontszerzokbol.
auto it = upper_bound(pontszerzok.begin(), pontszerzok.end(), card);
if (it == pontszerzok.end()) {
//`pontszerzok.end()`-et ad vissza, ha nem volt nagyobb
//Ha nem volt nagyobb, lementve eddig, akkor szerezhet majd pontot
//Lementjuk a pontszerzok tablaba
pontszerzok.push_back(card);
}
else {
//Ha volt nala nagyobb
//Az elso olyan kartyat adja vissza, ami nala nagyobb a pontszerzokbol.
//Ez az elsonek nala nagyobb kartya vette ki ot a paklibol,
//azaz az a kartya tuti szerzett pontot.
//Beallitjuk, hogy szerzett pontot.
pont[it - pontszerzok.begin()] = true;
}
}
//Osszeszamoljuk hogy mennyi kartya szerzett tenylegesen pontot.
int sum = 0;
for (bool b : pont) {
if (b) sum += 1;
}
cout << sum;
}
exit status 1
main.cpp: In function 'int main()':
main.cpp:34:27: error: 'upper_bound' was not declared in this scope
34 | auto it = upper_bound(pontszerzok.begin(), pontszerzok.end(), card);
| ^~~~~~~~~~~
Exited with error status 1