#include<bits/stdc++.h>
using namespace std;
int tab[1000000];
int maxsuf[1000000];
int minpref[1000000];
struct para{
int val;
int i;
};
int main()
{
ios_base::sync_with_stdio(0);
cin.tie();
cout.tie();
int n,k,i;
cin>>n>>k;
for(i=0;i<n;i++){
cin>>tab[i];
}
if(k==2){
minpref[0]=tab[0];
maxsuf[n-1]=tab[n-1];
for(i=1;i<n;i++)
minpref[i]=min(minpref[i-1],tab[i]);
for(int i=n-2;i>=0;i--)
maxsuf[i]=max(maxsuf[i+1],tab[i]);
//cout<<"\n";
for(i=0;i<n-1;i++){
//cout<<minpref[i]<<" "<<maxsuf[i+1]<<"\n";
if(minpref[i]>=maxsuf[i+1]){
cout<<"TAK\n"<<i+1<<"\n";
return 0;
}
}
cout<<"NIE\n";
return 0;
}
para maxx;
para minx;
if(k==3){
maxx.i=0;
maxx.val=tab[0];
minx.i=0;
minx.val=tab[0];
for(i=1;i<n;i++){
if(tab[i]>=maxx.val){
if(tab[i]!=maxx.val)
maxx.i=i;
maxx.val=tab[i];
}
if(tab[i]<=minx.val){
minx.val=tab[i];
minx.i=i;
}
}
//cout<<minx.val<<" "<<minx.i<<" "<<maxx.val<<" "<<maxx.i<<"\n";
if(maxx.i!=n-1)
{
cout<<"TAK\n"<<maxx.i+(maxx.i==0)<<" "<<maxx.i+1+(maxx.i==0)<<"\n";
return 0;
}
if(minx.i!=0){
cout<<"TAK\n"<<minx.i-(minx.i==n-1)<<" "<<minx.i-(minx.i==n-1)<<"\n";
return 0;
}
cout<<"NIE\n";
return 0;
}
for(i=0;i<n-1;i++){
if(tab[i]>=tab[i+1]){
maxx.i=i;
break;
}
if(i==n-2){
cout<<"NIE\n";
return 0;
}
}
cout<<"TAK\n";
bool xd=0;
i=1;
if(maxx.i==0){
cout<<1<<" "<<2<<" ";
k-=2;
xd=1;
i+=2;
}
for(;i<n-1;i++){
if(maxx.i==i){
cout<<i<<" "<<i+1<<" ";
k-=2;
if(maxx.i!=n-2){
k--;
cout<<i+2<<" ";
}
xd=1;
i+=2;
continue;
}
if((xd)&&(k>1)||(k>3+(maxx.i!=n-2))){
k--;
cout<<i<<" ";
}
}
}
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 | #include<bits/stdc++.h> using namespace std; int tab[1000000]; int maxsuf[1000000]; int minpref[1000000]; struct para{ int val; int i; }; int main() { ios_base::sync_with_stdio(0); cin.tie(); cout.tie(); int n,k,i; cin>>n>>k; for(i=0;i<n;i++){ cin>>tab[i]; } if(k==2){ minpref[0]=tab[0]; maxsuf[n-1]=tab[n-1]; for(i=1;i<n;i++) minpref[i]=min(minpref[i-1],tab[i]); for(int i=n-2;i>=0;i--) maxsuf[i]=max(maxsuf[i+1],tab[i]); //cout<<"\n"; for(i=0;i<n-1;i++){ //cout<<minpref[i]<<" "<<maxsuf[i+1]<<"\n"; if(minpref[i]>=maxsuf[i+1]){ cout<<"TAK\n"<<i+1<<"\n"; return 0; } } cout<<"NIE\n"; return 0; } para maxx; para minx; if(k==3){ maxx.i=0; maxx.val=tab[0]; minx.i=0; minx.val=tab[0]; for(i=1;i<n;i++){ if(tab[i]>=maxx.val){ if(tab[i]!=maxx.val) maxx.i=i; maxx.val=tab[i]; } if(tab[i]<=minx.val){ minx.val=tab[i]; minx.i=i; } } //cout<<minx.val<<" "<<minx.i<<" "<<maxx.val<<" "<<maxx.i<<"\n"; if(maxx.i!=n-1) { cout<<"TAK\n"<<maxx.i+(maxx.i==0)<<" "<<maxx.i+1+(maxx.i==0)<<"\n"; return 0; } if(minx.i!=0){ cout<<"TAK\n"<<minx.i-(minx.i==n-1)<<" "<<minx.i-(minx.i==n-1)<<"\n"; return 0; } cout<<"NIE\n"; return 0; } for(i=0;i<n-1;i++){ if(tab[i]>=tab[i+1]){ maxx.i=i; break; } if(i==n-2){ cout<<"NIE\n"; return 0; } } cout<<"TAK\n"; bool xd=0; i=1; if(maxx.i==0){ cout<<1<<" "<<2<<" "; k-=2; xd=1; i+=2; } for(;i<n-1;i++){ if(maxx.i==i){ cout<<i<<" "<<i+1<<" "; k-=2; if(maxx.i!=n-2){ k--; cout<<i+2<<" "; } xd=1; i+=2; continue; } if((xd)&&(k>1)||(k>3+(maxx.i!=n-2))){ k--; cout<<i<<" "; } } } |
English