#include <bits/stdc++.h> using namespace std; const int N_MAX = 5e5; int n, k; vector<int> butelki(N_MAX); vector<bool> czy_wyst(N_MAX + 1); // czy jakas butelka wystapila juz wczesniej int wynik = 0, il_roznych = 0; bool czy_da_sie = false; int main(void) // greedy { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for(int i=0; i<n; ++i){ cin >> butelki[i]; if(!czy_wyst[butelki[i]]){ wynik += (i - il_roznych); // wstawienie na odpowiednie miejsce il_roznych++; czy_wyst[butelki[i]] = true; } if(il_roznych == k){ // wybrano ilosc potrzebnych - koniec czy_da_sie = true; break; } } if(czy_da_sie) cout << wynik << '\n'; else cout << -1 << '\n'; }
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 | #include <bits/stdc++.h> using namespace std; const int N_MAX = 5e5; int n, k; vector<int> butelki(N_MAX); vector<bool> czy_wyst(N_MAX + 1); // czy jakas butelka wystapila juz wczesniej int wynik = 0, il_roznych = 0; bool czy_da_sie = false; int main(void) // greedy { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for(int i=0; i<n; ++i){ cin >> butelki[i]; if(!czy_wyst[butelki[i]]){ wynik += (i - il_roznych); // wstawienie na odpowiednie miejsce il_roznych++; czy_wyst[butelki[i]] = true; } if(il_roznych == k){ // wybrano ilosc potrzebnych - koniec czy_da_sie = true; break; } } if(czy_da_sie) cout << wynik << '\n'; else cout << -1 << '\n'; } |