결심
매운 닭고기 얼굴은 내 청소년 제목을 파괴
문제의 얼굴이 번역 쓴 있기 때문에 \ (n 개의-K의 나머지가 완료되지 않습니다 \) .
그래서 나머지 생각 (\ NK) \ 값을 계산합니다 개월이 만족되지 않습니다.
(그러나 사실입니다 만 \ (PK의 \) 더 ...)
첫째, 대통령의 규칙에 따라, 우리가 먼저 임페리얼 수 있습니다 \ (PK의 \)가 절대적으로 작업을 선택할 수 없습니다,
\ (B \) 하강은 다음 \ (A \) 오름차순 최후 선 촬영.
(... 그것을 이해하기 쉬워야한다)
그런 언론의 나머지 넣어 \ (A \) , 내림차순
이어서 \ (b \) 복용 전에 내림차순 \ (케이 \)를 제 최대 백발 상황이다.
여기에 \ (ㄱ \)가 하강 때문에의 나머지 (\ PK) \ 또한 불만이 있지만, 가장 큰,
그래서 만약 하강 더 많은 기회가있다.
그런 다음 나머지 고려 (PK \) \을 A,
킹 제임스 반드시 불만의 가장 큰 경우가 아니라 전에 때문에,
그래서 우리는 첫 번째 순서를 눌러야합니다,
이미 복용하기 전에했다 \ (케이 \) 작업의 얼굴에서 지난 후 개월 \ (PK \) 목록에있는 일.
이것은 약간 복잡한 사운드 수 있습니다 ...
우리는의 나머지 수 있도록 싶기 때문에 \는 (PK \) 하나가 앞에서 방해 할 수 없습니다 \ (케이 \) (즉, 의자의 규칙에 더 높은 우선 순위) 일.
그리고 자신 \ (전년 동기 대비 \) 아래의 목록에 있어야합니다.
주목해야 할 또 다른 점은이다
두 작업 수 있으므로 \ (A, B \) , 동등
그래서 결과가 두 번 같은 종류를하지 않을 수 있습니다합니다 (WA 침을하기 때문에 ...)
그래서 잘 세 번째 키와 숫자를 주문할 때.
암호:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
const int N=200005;
struct node{int x,y,tag,id,pos;}a[N],b[N];
int n,K,P,sum=0x3f3f3f3f,ret=0;
inline bool cmp(node a,node b){
return a.y!=b.y? a.y<b.y:a.x>b.x;
}
inline bool cmp1(node a,node b){
// if(a.tag!=b.tag) return a.tag<b.tag;
if(a.x!=b.x) return a.x>b.x;
return a.y>b.y;
}
inline bool cmp2(node a,node b){return a.y!=b.y? a.y>b.y:a.x<b.x;}
signed main(){
n=read();P=read();K=read();
for(int i=1;i<=n;i++) a[i].x=read(),a[i].y=read();
for(int i=1;i<=n;i++) a[i].id=i;
sort(a+1,a+n+1,cmp2);
memcpy(b,a,sizeof(b));
for(int i=1;i<=n;i++) a[i].pos=i;
int ss=P-K;
sort(a+1,a+n-ss+1,cmp1);
for(int i=1;i<=K;i++) printf("%d ",a[i].id);
for(int i=1;i<=K;i++) ret=max(ret,a[i].pos);
// sort(a+ret+1,a+n+1,cmp2);
for(int i=1;i<=ss;i++){
printf("%d ",b[i+ret].id);
}
// for(int i=1;i<=n;i++) if(a[i].tag) printf("%d ",a[i].id);
puts("");
return 0;
}