#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<<" "; } } } |