#include <iostream>
#include <set>
#include <vector>
using namespace std;
#undef _HOME_
#ifdef _HOME_
#define DEBUG(x) x
#else
#define DEBUG(x)
#endif
#define REP(x,n) for(int x=0;x<(n);++x)
#define FOREACH(x,n) for(__typeof(n.begin()) x = (n).begin(); x != (n).end(); ++x)
#define RESULT(x) {cout<<(x);return 0;}
const int MAX_N = 500005;
int n,k,tabx;
bool present[MAX_N];
int main() {
ios_base::sync_with_stdio(0);
cin>>n>>k;
int toMove = 0;
long long result = 0;
REP(x,n) {
cin>>tabx;
if (!present[tabx]) {
DEBUG(cerr<<"new: " << tabx << " / " << x << endl);
present[tabx] = true;
result += toMove;
if (!(--k)) {
RESULT(result);
}
}
else {
DEBUG(cerr<<"to move: " << tabx << " / " << x << endl);
++toMove;
}
}
RESULT(-1);
}
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 | #include <iostream> #include <set> #include <vector> using namespace std; #undef _HOME_ #ifdef _HOME_ #define DEBUG(x) x #else #define DEBUG(x) #endif #define REP(x,n) for(int x=0;x<(n);++x) #define FOREACH(x,n) for(__typeof(n.begin()) x = (n).begin(); x != (n).end(); ++x) #define RESULT(x) {cout<<(x);return 0;} const int MAX_N = 500005; int n,k,tabx; bool present[MAX_N]; int main() { ios_base::sync_with_stdio(0); cin>>n>>k; int toMove = 0; long long result = 0; REP(x,n) { cin>>tabx; if (!present[tabx]) { DEBUG(cerr<<"new: " << tabx << " / " << x << endl); present[tabx] = true; result += toMove; if (!(--k)) { RESULT(result); } } else { DEBUG(cerr<<"to move: " << tabx << " / " << x << endl); ++toMove; } } RESULT(-1); } |
English