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
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include<bits/stdc++.h>
using namespace std;
int tab[1000010];
map <int,int> mapa;
vector <int> tablica;
void op2(int a)
{
    int poz=1,pozv=0;
    int mini=2*pow(10,9);
    int maxi=0;
    for(int i=1;i<=a;i++)
    {
        mapa[tab[i]]++;
        tablica.push_back(-tab[i]);
        maxi=max(maxi,tab[i]);
    }
    sort(tablica.begin(),tablica.end());
    mini=-tablica[0];
    while(maxi>=mini)
    {
        mapa[tab[poz]]--;
        if(mapa[tab[poz]]==0 && tab[poz]==maxi)
        {
            pozv++;
            maxi=-tablica[pozv];
            mini=min(mini,tab[poz]);
        }
        poz++;
        if(poz==a)
        {
            cout << "NIE";
            return ;
        }
    }
    cout << "TAK\n" << poz << " " << mini << " " << maxi;
} /// wszystko jest w ciągu 2, a wypisujemy pozycję wtedy, gdy największy element ciągu starego jest mniejszy od najmniejszego elementu ciągu nowego.
int main()
{
    int a,b,mxp=0,mx=0,c=0;
    cin >> a >> b;
    for(int i=1;i<=a;i++)
    {
        cin >> tab[i];
        if(tab[i]>mx)
        {
            mx=tab[i];
            mxp=i;
        }
    }
    if(b==2)
    {
        /// pomysł na 2 przedziały: najpierw ustawiam wskaźnik na 0, i zapisuję jakie są liczby w przedziale po wskaźniku razem z ich ilością. Potem przechodzę wskaźnikiem i usuwam element
        /// z przedziału 2 i dodaję na przedział 1. Następnie patrzę na elementy czy przedział 2 jest wiekszy od przedziału 1 (najw. el. p. 2 < najmn. el. p. 1) i wtedy wypisuję
        op2(a);
        return 0;
    }
    if(mxp==a || mxp==1)
    {
        if(mxp==1)
        {
            cout << "TAK\n";
            for (int i=1;i<b;i++)
            {
                cout << i << " ";
            }
            return 0;
        }
        else
        {
            for(int i=a;i>0;i--)
            {
                if(tab[i]<=tab[i-1])
                {
                    c=i;
                    break;
                }
            }
            if(c==0)
            {
                cout << "NIE";
                return 0;
            }

        }
        if(b==3)
        {
            cout << "TAK\n";
            cout << c-1 << " " << c;
        }
        if(b>=4)
        {
            if(c<=b)
            {
                cout << "TAK\n";
                for (int i=1;i<b;i++)
                {
                    cout << i << " ";
                }
            }
            else
            {
                cout << "TAK\n";
                for(int i=1;i<=b-2;i++)
                {
                    cout << i << " ";
                }
                cout << c-1 << " " << c;
            }
        }
    }
    else /// jak mxp=1 to jest na drugiej pozycji i jak chcemy wypisać ten element i ten przed nim to wypisujemy mxp i mxp+1
    {
        if(b==3)
        {
            cout << "TAK\n" << mxp << " " << mxp+1;
        }
        if(b>=4) /// 1 2 3 4 1 2 3 3 //5 nie można, //b>=6 można, mxp=4, if(mxp+2<=b)
        {
            if(mxp+2<=b)
            {
                cout << "TAK\n";
                for (int i=1;i<b;i++)
                {
                    cout << i << " ";
                }
            }
            else
            {
                cout << "TAK\n";
                for(int i=1;i<b-2;i++)
                {
                    cout << i << " ";
                }
                cout << mxp << " " << mxp+1;
            }
        }
    }
}