#include<bits/stdc++.h> using namespace std; int a[500*1000+7]; int przod_min[500*1000+7]; //int przod_max[500*1000+7]; //int tyl_min[500*1000+7]; int tyl_max[500*1000+7]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, k, ost=-1, przed_ost=-1; bool czy_rosnacy=true, czy_staly=true, czy_niemalejacy=true; cin >> n >> k; for(int i=0; i<n; ++i) cin >> a[i]; for(int i=1; i<n; ++i){ if(a[i]!=a[i-1]) czy_staly=false; if(a[i]==a[i-1]) przed_ost = i-1, ost = i; if(a[i]==a[i-1] || a[i]<a[i-1]) czy_rosnacy=false; if(a[i]<a[i-1]) czy_niemalejacy=false; } if(czy_rosnacy){ cout << "NIE"; return 0; } if(czy_staly){ cout << "TAK" << '\n'; for(int i=1; i<k; ++i) cout << i << ' '; return 0; } if(czy_niemalejacy){ if(k>=3 && a[0]==a[1]){ cout << "TAK" << '\n'; cout << 1 << ' ' << 2 << ' '; for(int i=3; i<k; ++i) cout << i << ' '; } else if(k>=3 && a[n-1]==a[n-2]){ cout << "TAK" << '\n'; for(int i=1; i<k-2; ++i) cout << i << ' '; cout << n-2 << ' ' << n-1 << ' '; } else if(k>=4){ cout << "TAK" << '\n'; k-=4; bool czy_wykorzystane = false; for(int i=0; i<n; ++i){ if(k==0) break; if(i==przed_ost-1 || i==przed_ost || i==ost){ cout << i+1 << ' '; czy_wykorzystane = true; } else{ cout << i+1 << ' '; --k; } } if(!czy_wykorzystane) cout << przed_ost << ' ' << ost << ' ' << ost+1 << ' '; } else{ cout << "NIE"; return 0; } } else{ if(k>=4){ cout << "TAK" << '\n'; for(int i=1; i<n; ++i) if(a[i]<=a[i-1]) przed_ost = i-1, ost = i; k-=4; bool czy_wykorzystane = false; for(int i=0; i<n; ++i){ if(k==0) break; if(i==przed_ost-1 || i==przed_ost || i==ost){ cout << i+1 << ' '; czy_wykorzystane = true; } else{ cout << i+1 << ' '; --k; } } if(!czy_wykorzystane) cout << przed_ost << ' ' << ost << ' ' << ost+1 << ' '; } else if(k==3){ int min_id=0, max_id=n-1; for(int i=1; i<n; ++i) if(a[i]<=a[min_id]) min_id = i; for(int i=n-2; i>=0; --i) if(a[i]>=a[max_id]) max_id = i; if(a[n-1]<=a[n-2]){ cout << "TAK" << '\n'; for(int i=1; i<k-2; ++i) cout << i << ' '; cout << n-2 << ' ' << n-1 << ' '; } else if(a[0]>=a[1]){ cout << "TAK" << '\n'; cout << 1 << ' ' << 2 << ' '; for(int i=3; i<k; ++i) cout << i << ' '; } else if(min_id==0 && max_id==n-1){ cout << "NIE"; return 0; } else{ cout << "TAK" << '\n'; if(min_id!=0) cout << min_id << ' ' << min_id+1; else if(max_id!=n-1) cout << max_id << ' ' << max_id+1; return 0; } } else if(k==2){ int mn=a[0]; for(int i=1; i<n-1; ++i) mn = min(mn, a[i]); if(a[n-1] <= mn){ cout << "TAK" << '\n'; cout << n-1; return 0; } przod_min[0] = a[0]; for(int i=1; i<n; ++i){ przod_min[i] = min(przod_min[i-1], a[i]); //przod_max[i] = max(przod_max[i-1], a[i]); } tyl_max[n-1] = a[n-1]; for(int i=n-2; i>=0; --i){ //tyl_min[i] = min(tyl_min[i+1], a[i]); tyl_max[i] = max(tyl_max[i+1], a[i]); } for(int i=0; i<n-1; ++i){ if(przod_min[i]>=tyl_max[i+1]){ cout << "TAK" << '\n'; cout << i+1; return 0; } } cout << "NIE"; } } return 0; }
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 139 140 141 142 143 144 145 146 | #include<bits/stdc++.h> using namespace std; int a[500*1000+7]; int przod_min[500*1000+7]; //int przod_max[500*1000+7]; //int tyl_min[500*1000+7]; int tyl_max[500*1000+7]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n, k, ost=-1, przed_ost=-1; bool czy_rosnacy=true, czy_staly=true, czy_niemalejacy=true; cin >> n >> k; for(int i=0; i<n; ++i) cin >> a[i]; for(int i=1; i<n; ++i){ if(a[i]!=a[i-1]) czy_staly=false; if(a[i]==a[i-1]) przed_ost = i-1, ost = i; if(a[i]==a[i-1] || a[i]<a[i-1]) czy_rosnacy=false; if(a[i]<a[i-1]) czy_niemalejacy=false; } if(czy_rosnacy){ cout << "NIE"; return 0; } if(czy_staly){ cout << "TAK" << '\n'; for(int i=1; i<k; ++i) cout << i << ' '; return 0; } if(czy_niemalejacy){ if(k>=3 && a[0]==a[1]){ cout << "TAK" << '\n'; cout << 1 << ' ' << 2 << ' '; for(int i=3; i<k; ++i) cout << i << ' '; } else if(k>=3 && a[n-1]==a[n-2]){ cout << "TAK" << '\n'; for(int i=1; i<k-2; ++i) cout << i << ' '; cout << n-2 << ' ' << n-1 << ' '; } else if(k>=4){ cout << "TAK" << '\n'; k-=4; bool czy_wykorzystane = false; for(int i=0; i<n; ++i){ if(k==0) break; if(i==przed_ost-1 || i==przed_ost || i==ost){ cout << i+1 << ' '; czy_wykorzystane = true; } else{ cout << i+1 << ' '; --k; } } if(!czy_wykorzystane) cout << przed_ost << ' ' << ost << ' ' << ost+1 << ' '; } else{ cout << "NIE"; return 0; } } else{ if(k>=4){ cout << "TAK" << '\n'; for(int i=1; i<n; ++i) if(a[i]<=a[i-1]) przed_ost = i-1, ost = i; k-=4; bool czy_wykorzystane = false; for(int i=0; i<n; ++i){ if(k==0) break; if(i==przed_ost-1 || i==przed_ost || i==ost){ cout << i+1 << ' '; czy_wykorzystane = true; } else{ cout << i+1 << ' '; --k; } } if(!czy_wykorzystane) cout << przed_ost << ' ' << ost << ' ' << ost+1 << ' '; } else if(k==3){ int min_id=0, max_id=n-1; for(int i=1; i<n; ++i) if(a[i]<=a[min_id]) min_id = i; for(int i=n-2; i>=0; --i) if(a[i]>=a[max_id]) max_id = i; if(a[n-1]<=a[n-2]){ cout << "TAK" << '\n'; for(int i=1; i<k-2; ++i) cout << i << ' '; cout << n-2 << ' ' << n-1 << ' '; } else if(a[0]>=a[1]){ cout << "TAK" << '\n'; cout << 1 << ' ' << 2 << ' '; for(int i=3; i<k; ++i) cout << i << ' '; } else if(min_id==0 && max_id==n-1){ cout << "NIE"; return 0; } else{ cout << "TAK" << '\n'; if(min_id!=0) cout << min_id << ' ' << min_id+1; else if(max_id!=n-1) cout << max_id << ' ' << max_id+1; return 0; } } else if(k==2){ int mn=a[0]; for(int i=1; i<n-1; ++i) mn = min(mn, a[i]); if(a[n-1] <= mn){ cout << "TAK" << '\n'; cout << n-1; return 0; } przod_min[0] = a[0]; for(int i=1; i<n; ++i){ przod_min[i] = min(przod_min[i-1], a[i]); //przod_max[i] = max(przod_max[i-1], a[i]); } tyl_max[n-1] = a[n-1]; for(int i=n-2; i>=0; --i){ //tyl_min[i] = min(tyl_min[i+1], a[i]); tyl_max[i] = max(tyl_max[i+1], a[i]); } for(int i=0; i<n-1; ++i){ if(przod_min[i]>=tyl_max[i+1]){ cout << "TAK" << '\n'; cout << i+1; return 0; } } cout << "NIE"; } } return 0; } |