https://www.acmicpc.net/problem/17619
17619번: 개구리 점프
첫 번째 줄에 통나무 개수 N과 질문의 개수 Q가 주어진다. 다음 N개의 줄에 각 통나무에 x1, x2, y의 세 정수 좌표가 주어진다. 주어진 통나무는 두 점 (x1, y)와 (x2, y)를 잇는 형태이다. (x1 < x2) 모든 좌표는 0이상 109이하이다. 통나무들은 주어진 순서대로 1번부터 번호가 붙어 있다. 서로 다른 두 통나무는 (끝점에서도) 만나지 않는다. 다음 Q개의 줄에 서로 다른 두 통나무의 번호가 주어진다. (1 ≤ N ≤ 100,00
www.acmicpc.net
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
//2019 정올 2차 2번 문제 (중등)
struct s{
int a,b,pos;
};
bool compare(struct s x,struct s y)
{
//return x.a<y.a;
if(x.a<y.a)
return true;
return false;
}
int main()
{
int m,n,i,j,y,r1[1000000]={0,},r2[1000000]={0,},max1,k=0,t=0,z=0,flag=0;
int g2[1000000];
struct s log[1000000];
scanf("%d %d",&m,&n);
for(i=0;i<m;i++){
scanf("%d %d %d",&log[i].a,&log[i].b,&y);
log[i].pos=i+1;
g2[log[i].pos] = log[i].pos;
}
for(i=0;i<n;i++)
scanf("%d %d",&r1[i],&r2[i]);
sort(log,log+m,compare);
while(1)
{
max1=log[t].b;
int group = g2[log[t].pos];
for(i=t;i<m-1;i++)
{
if(log[i+1].a<=max1)
{
g2[log[i+1].pos] = group;
if(log[i+1].b>max1)
max1=log[i+1].b;
}
else
break;
}
t=i+1;
k++;
z=0;
if(t>=m)
break;
}
for(t=0;t<n;t++)
{
if(g2[r1[t]] == g2[r2[t]]) puts("1");
else puts("0");
}
return 0;
}
'정보올림피아드-KOI > BOJ' 카테고리의 다른 글
백준 : 두 박스 : 15973 (0) | 2020.03.31 |
---|---|
[백준] 신기한 수 : 17618번 - 2019 정보올림피아드 2차 중등 1번문제 (0) | 2020.03.22 |
부분수열의 합 - 1182 (0) | 2020.03.01 |
랜선 자르기 1654번 (0) | 2020.03.01 |
10816번 숫자 카드 2 (0) | 2020.02.16 |