HDU 5360 우선 대기 열
제목: n 개인 에 대해 선택 한 순 서 를 써 서 마지막 에 참가 하 는 사람 이 가장 많 습 니 다. 현재 의 사람 에 게 참가 하 는 조건 은 이미 참가 한 사람 이 L 보다 많 고 그의 R 보다 적 으 며 여러 가지 상황 이 수출 을 만족 시 킬 수 있 습 니 다.
사고방식: 어떻게 하면 인원수 가 가장 많 을 수 있 는 지 생각해 보 자. 예 를 들 어 현재 참가 한 인원 이 ans 개 라면 모든 L 이 ans 보다 적 고 참가 하지 않 은 사람 이 다 해 볼 수 있다. 그러면 이렇게 많은 사람들 이 어느 것 이 가장 좋 은 지 선택 할 수 있다. 당연히 R 을 선택 한 가장 작은 만족 이 ans 와 같은 사람 보다 크다. 이런 사람들 은 우선 대기 열 로 저장 하면 된다. 만족 하 는 것 을 찾 으 면 뛰 어 나온다.그렇지 않 으 면 ans 의 팝 업 을 만족 시 키 지 못 할 것 입 니 다. ans 개 를 만족 시 키 지 못 할 것 입 니 다. ans 이후 의 그것 은 더욱 만족 하지 않 을 것 입 니 다.
#include <queue>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3fll;
const int maxn=100010;
int L[maxn],R[maxn];
int vis[maxn],vis1[maxn];
struct number1{
int x,pos;
bool operator < (const number1 &a) const {return x>a.x;}
};
int main(){
int T,n;
scanf("%d",&T);
while(T--){
memset(vis,0,sizeof(vis));
memset(vis1,0,sizeof(vis1));
number1 nn;
scanf("%d",&n);
priority_queue<number1>qu;
priority_queue<number1>que[100010];
for(int i=1;i<=n;i++){
scanf("%d",&L[i]);
if(L[i]>n) L[i]=n+1;
}
for(int i=1;i<=n;i++) scanf("%d",&R[i]);
for(int i=1;i<=n;i++){
nn.x=R[i];nn.pos=i;
que[L[i]].push(nn);
}
int ans=0;
for(int i=0;i<=n;i++){
int flag=0;
while(!que[i].empty()){
nn=que[i].top();que[i].pop();
qu.push(nn);
}
while(!qu.empty()){
nn=qu.top();qu.pop();
if(nn.x>=ans){
vis[ans++]=nn.pos;vis1[nn.pos]=1;
flag=1;break;
}
}
if(flag==0) break;
}
printf("%d
",ans);
for(int i=0;i<ans;i++) printf("%d ",vis[i]);
for(int i=1;i<=n;i++) if(vis1[i]==0) printf("%d ",i);
printf("
");
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.