Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n,k, Pj, key;//Pj é o primeiro "Pointer", o que ficara atrás, Key é a chave de controle
  5. bool found;//controle
  6. pair<int,int>answer;//acho que n usei isso, provavelmente da solução anterior q pensei
  7. map<int,pair<bool,int>>HNumber;
  8. int main(){
  9.     ios::sync_with_stdio(0);
  10.     cin.tie(0);
  11.     cin>>n>>k;
  12.     int arranjo[n];
  13.         for(int i = 0; i<n; i++){
  14.             cin>>arranjo[i];
  15.         }
  16.         for(int i = 0; i<n;i++){//esse passo ACHO que podia ter sido feito junto com a entrada :(
  17.             if(HNumber[arranjo[i]].first == false){//caso o numero nunca tenha sido visto
  18.                 key++;
  19.                 HNumber[arranjo[i]].first = true;
  20.                 HNumber[arranjo[i]].second++;//adiciona a quantidade de vezes que ele aparece
  21.             }else{
  22.                 HNumber[arranjo[i]].second++;//adiciona a quantidade de vezes que ele aparece
  23.             }
  24.             if(key>k){//caso exceda o numero que coloca como limite. . .
  25.                 if(((i-1)-Pj) >= (answer.first - answer.second)){//para verificar se é a melhor resposta
  26.                     answer.first = i-1;
  27.                     answer.second = Pj;
  28.                 }
  29.                     while(!found){//procura um elemento para ser retirado
  30.                         if(HNumber[arranjo[Pj]].second == 1){//se só tiver 1 elemento daquele numero . . .
  31.                             HNumber[arranjo[Pj]].first = false;
  32.                             HNumber[arranjo[Pj]].second--;
  33.                             found = true;//encontrou o elemento para que "estabilize" o Key
  34.                             Pj++;
  35.                         }else{//caso tenha mais do que 1 elemento, ele ira retirar 1 deles
  36.                             HNumber[arranjo[Pj]].second--;
  37.                             Pj++;
  38.                         }
  39.                     }
  40.                 found = false;
  41.                 key--;
  42.             }else if(i == n-1){//Para calcular o range no ULTIMO numero, caso ele nunca tenha sido calculado
  43.                 if(((i)-Pj) >= (answer.first - answer.second)){
  44.                     answer.first = i;
  45.                     answer.second = Pj;
  46.                 }
  47.             }
  48.         }
  49.         if(answer.second == 0 && answer.first == 0){
  50.             cout<<1<<" "<<n<<"\n";
  51.         }else{
  52.             cout<<answer.second+1<<" "<<answer.first+1<<"\n";
  53.         }
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement