#include<bits/stdc++.h> #define int long long using namespace std; int n, k; vector<int> tab; void k2(){ vector<int> prefmin(n); vector<int> sufmax(n); prefmin[0] = tab[0]; sufmax[n-1] = tab[n-1]; for(int i=1; i<n; i++)prefmin[i] = min(prefmin[i-1], tab[i]); for(int i=n-2; i>=0; i--)sufmax[i] = max(sufmax[i+1], tab[i]); for(int i=1; i<n; i++){ if(prefmin[i-1] >= sufmax[i]){ cout<<"TAK\n"; cout<<i<<endl; return; } } cout<<"NIE"; } void k3(){ int mx = -1, mn = 1e10; for(auto x : tab){ mx = max(x, mx); mn = min(x, mn); } if(mx == mn){ cout<<"TAK\n"; cout<<1<<" "<<2; return; } vector<int> wystmx, wystmn; for(int i=0; i<n; i++){ if(tab[i] == mn)wystmn.push_back(i); } for(int i=n-1; i>=0; i--) if(tab[i] == mx)wystmx.push_back(i); if(wystmx.size() == 1 && wystmx[0] == n-1 && wystmn.size() == 1 && wystmn[0] == 0){ cout<<"NIE\n"; return; } if(wystmx[0] != n-1){ cout<<"TAK\n"; cout<<wystmx[0]<<" "<<wystmx[0]+1<<endl; return; } if(wystmn[0] != 0){ cout<<"TAK\n"; cout<<wystmn[0]<<" "<<wystmn[0]+1<<endl; return; } if(wystmx.size()>1){ cout<<"TAK\n"; cout<<wystmx[1]<<" "<<wystmx[1]+1; return; } if(wystmn.size()>1){ cout<<"TAK\n"; cout<<wystmn[1]<<" "<<wystmn[1]+1; return; } } void k4(){ bool czymono = true; for(int i=1; i<n; i++){ if(tab[i-1] >= tab[i]){ vector<int> wynik = {i-1, i}; if(i-1 == 0){ for(int j=2; j<k; j++){ wynik.push_back(j); } }else{ wynik.push_back(i-2); int cnt = 3; for(int j=0; j<n; j++){ if(cnt < k-1 && (j < i-2 || j > i ) ){ wynik.push_back(j); cnt++; } } } cout<<"TAK\n"; sort(wynik.begin(), wynik.end()); for(auto x : wynik){ cout<<x+1<<" "; } return; } } cout<<"NIE"; } void solve(){ if(k==2)k2(); if(k==3)k3(); if(k>3)k4(); } int32_t main(){ cin>>n>>k; tab.resize(n); for(auto &x : tab)cin>>x; solve(); }
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 | #include<bits/stdc++.h> #define int long long using namespace std; int n, k; vector<int> tab; void k2(){ vector<int> prefmin(n); vector<int> sufmax(n); prefmin[0] = tab[0]; sufmax[n-1] = tab[n-1]; for(int i=1; i<n; i++)prefmin[i] = min(prefmin[i-1], tab[i]); for(int i=n-2; i>=0; i--)sufmax[i] = max(sufmax[i+1], tab[i]); for(int i=1; i<n; i++){ if(prefmin[i-1] >= sufmax[i]){ cout<<"TAK\n"; cout<<i<<endl; return; } } cout<<"NIE"; } void k3(){ int mx = -1, mn = 1e10; for(auto x : tab){ mx = max(x, mx); mn = min(x, mn); } if(mx == mn){ cout<<"TAK\n"; cout<<1<<" "<<2; return; } vector<int> wystmx, wystmn; for(int i=0; i<n; i++){ if(tab[i] == mn)wystmn.push_back(i); } for(int i=n-1; i>=0; i--) if(tab[i] == mx)wystmx.push_back(i); if(wystmx.size() == 1 && wystmx[0] == n-1 && wystmn.size() == 1 && wystmn[0] == 0){ cout<<"NIE\n"; return; } if(wystmx[0] != n-1){ cout<<"TAK\n"; cout<<wystmx[0]<<" "<<wystmx[0]+1<<endl; return; } if(wystmn[0] != 0){ cout<<"TAK\n"; cout<<wystmn[0]<<" "<<wystmn[0]+1<<endl; return; } if(wystmx.size()>1){ cout<<"TAK\n"; cout<<wystmx[1]<<" "<<wystmx[1]+1; return; } if(wystmn.size()>1){ cout<<"TAK\n"; cout<<wystmn[1]<<" "<<wystmn[1]+1; return; } } void k4(){ bool czymono = true; for(int i=1; i<n; i++){ if(tab[i-1] >= tab[i]){ vector<int> wynik = {i-1, i}; if(i-1 == 0){ for(int j=2; j<k; j++){ wynik.push_back(j); } }else{ wynik.push_back(i-2); int cnt = 3; for(int j=0; j<n; j++){ if(cnt < k-1 && (j < i-2 || j > i ) ){ wynik.push_back(j); cnt++; } } } cout<<"TAK\n"; sort(wynik.begin(), wynik.end()); for(auto x : wynik){ cout<<x+1<<" "; } return; } } cout<<"NIE"; } void solve(){ if(k==2)k2(); if(k==3)k3(); if(k>3)k4(); } int32_t main(){ cin>>n>>k; tab.resize(n); for(auto &x : tab)cin>>x; solve(); } |