#include <stdio.h> #include <bitset> #include <set> using namespace std; int tab[512000]; int main() { int n,k; scanf("%d%d\n",&n,&k); for(int i=0;i<n;i++) { scanf("%d",tab+i); } if(k==2) { multiset<int>s1,s2; s1.insert(tab[0]); for(int i=1;i<n;i++) { s2.insert(tab[i]); } int j=-1; for(int i=1;i<n;i++) { /* printf("sety:\n"); for(auto a : s1) { printf("%d ",a); } printf("\n"); for(auto a : s2) { printf("%d ",a); } printf("\n"); */ if(*(s1.begin())>=*(s2.rbegin())) { // printf("%d %d\n",*(s1.begin()),*(s2.rbegin())); printf("TAK\n%d",i); j=i; break; } s2.erase(s2.lower_bound(tab[i])); s1.insert(tab[i]); } if(j==-1)printf("NIE"); } else if(k==3) { for(int i=1;i<n-1;i++) { if(tab[i]<=tab[0]) { printf("TAK\n%d %d",i,i+1); return 0; } } for(int i=n-2;i>=1;i--) { if(tab[i]>=tab[n-1]) { printf("TAK\n%d %d",i,i+1); return 0; } } printf("NIE"); } else { set<int>r; for(int i=1;i<n;i++) { if(tab[i-1]>=tab[i]) { r.insert(i); r.insert(i+1); if(i==n-1)r.insert(i-1); else if(i>1)r.insert(i-1); break; } } if(r.empty()) { printf("NIE"); } else { int i=1; while(r.size()<k-1) { r.insert(i); i++; } printf("TAK\n"); for(auto a : r) { printf("%d ",a); } } } 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 | #include <stdio.h> #include <bitset> #include <set> using namespace std; int tab[512000]; int main() { int n,k; scanf("%d%d\n",&n,&k); for(int i=0;i<n;i++) { scanf("%d",tab+i); } if(k==2) { multiset<int>s1,s2; s1.insert(tab[0]); for(int i=1;i<n;i++) { s2.insert(tab[i]); } int j=-1; for(int i=1;i<n;i++) { /* printf("sety:\n"); for(auto a : s1) { printf("%d ",a); } printf("\n"); for(auto a : s2) { printf("%d ",a); } printf("\n"); */ if(*(s1.begin())>=*(s2.rbegin())) { // printf("%d %d\n",*(s1.begin()),*(s2.rbegin())); printf("TAK\n%d",i); j=i; break; } s2.erase(s2.lower_bound(tab[i])); s1.insert(tab[i]); } if(j==-1)printf("NIE"); } else if(k==3) { for(int i=1;i<n-1;i++) { if(tab[i]<=tab[0]) { printf("TAK\n%d %d",i,i+1); return 0; } } for(int i=n-2;i>=1;i--) { if(tab[i]>=tab[n-1]) { printf("TAK\n%d %d",i,i+1); return 0; } } printf("NIE"); } else { set<int>r; for(int i=1;i<n;i++) { if(tab[i-1]>=tab[i]) { r.insert(i); r.insert(i+1); if(i==n-1)r.insert(i-1); else if(i>1)r.insert(i-1); break; } } if(r.empty()) { printf("NIE"); } else { int i=1; while(r.size()<k-1) { r.insert(i); i++; } printf("TAK\n"); for(auto a : r) { printf("%d ",a); } } } return 0; } |