Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <limits>
  5. #include <unordered_set>
  6. using namespace std;
  7.  
  8. void printVector(vector<int>&v){
  9.     for(int a:v){
  10.         cout << a << " ";
  11.     }
  12.     cout << endl;
  13. }
  14.  
  15. void printMap(map<int, int>mapp, int k){
  16.     for(int i = 1; i <= k; i++){
  17.         cout << i << " -> " << mapp[i] << endl;
  18.     }
  19. }
  20.  
  21. int main(){
  22.     int k, n;
  23.     // k - broj firmi koje drze predavanja
  24.     // n - ukupan broj predavanja
  25.     cin >> k >> n;
  26.  
  27.     vector<int>predavanja(n);
  28.     for(int i = 0; i<n; i++) cin >> predavanja[i];
  29.  
  30.     //zeljeni skup je u principu skup unikatnih elemanata niza predavanja (1, .... k)    
  31.  
  32.     map<int, int> brojPojavljivanja; //prati koliko puta se pojavila firma u trenutnoj podnisci
  33.     int i = 0, j = 0;
  34.     int min_duzina = numeric_limits<int>::max();
  35.     int minLevo, minDesno; //koristio za debagovanje
  36.     while(j < n){    
  37.         brojPojavljivanja[predavanja[j]]++;
  38.         if(brojPojavljivanja.size() == k){
  39.             //znaci da mapa ima K jedinstvenih elemenata, sto znaci da se svako predavanje pojavilo bar jednom
  40.             while(brojPojavljivanja[predavanja[i]] > 1){
  41.                 //skrajcava s pocetka jedno po jedno predavanje dok nekog od njih ne ostane tacno jedno, tad ne sme da se skrajcava vise
  42.                 brojPojavljivanja[predavanja[i]]--;
  43.                 i++;
  44.             }
  45.  
  46.             if(j - i +1 < min_duzina) {              
  47.                 //minimum i granice
  48.                 min_duzina = j-i+1;
  49.                 minLevo = i;
  50.                 minDesno = j;
  51.             }
  52.         }
  53.         j++;
  54.     }
  55.  
  56.     if(brojPojavljivanja.size() < k) cout << 0;
  57.     else{
  58.         cout << min_duzina << endl;
  59.         //cout << "od " << minLevo << " do " << minDesno << endl;
  60.        
  61.     }
  62.  
  63.     return 0;
  64. }
  65.  
  66. /*
  67. 4
  68. 20
  69. 4 2 4 3 3 2 2 4 2 2 3 3 1 3 3 1 4 4 1 4
  70.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement