POJ 2482 라인 트 리 이산 화 스캐닝 라인 매트릭스 최대 값

1739 단어 ACM_선분 수POJ
제목: n 개의 별의 좌 표를 드 립 니 다. 별 마다 밝기 가 있 고 사각형 의 길이 와 너 비 를 드 립 니 다. 사각형 에 포 함 될 별의 최대 밝기 와 (테두리 포함 하지 않 음) 를 물 어보 세 요.
사고: 평면 에 몇 개의 구역 이 있 고 모든 구역 은 하나의 가중치 가 있 으 며 실제 적 으로 중첩 되 는 지역 의 가중치 와 최대 가 있 기 를 바 랍 니 다.스캐닝 라인 알고리즘 을 사용 하여 각 지역 의 좌우 경 계 를 꺼 내 고 4 원 그룹 2 개 를 저장 합 니 다. (x, y, y + h, c) (x + w, y, y + h, - c) 1 차원 크기 로 정렬 합 니 다.또한 y 에 대해 하나의 선분 트 리 를 만 들 고 유지 구간 의 최대 치 max 1 은 선분 트 리 의 한 값 y 대표 구간 [y, y + 1] 이 고 구간 [y, y + 1 + h] 은 선분 트 리 의 y + 1 y + 2. y + h 와 같은 선분 트 리 가 유지 하 는 값 은 몇 개의 숫자 로 구 성 된 서열 이 라 고 볼 수 있다.
각 4 원 그룹 을 하나씩 스 캔 하고 온라인 세그먼트 트 리 에서 구간 수정 (지연 표 시 를 사용 할 수 있 습 니 다) 을 실행 하여 [y1, y2] 의 각 수 에 c 를 추가 한 다음 루트 노드 로 답 을 업데이트 합 니 다.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define MAXN 205
#define lson l,(l+r)/2,rt<<1
#define rson (l+r)/2,r,rt<<1|1
struct Line   //   
{
    int x,y1,y2;
    int flag;
}c[MAXN];
struct Node   //     y        
{
    int l,r;//         
    int max1;//max1     
    int lazy;//
    //len         ,rf,lf                
}a[MAXN*3];
int cnt,numy,max1;
double y[MAXN];//  y     
bool cmp(Line a,Line b)//          
{
    if(a.x!=b.x)
      return a.x < b.x;
    else
      return a.flag>1;
    Build(rt<<1,l,mid);
    Build(rt<<1|1,mid,r);//    
}
void update(int L,int R,int K,int rt)//    e,      
{
    if(L<=a[rt].l&&a[rt].r<=R){
        a[rt].lazy+=K;
        a[rt].max1+=K;
        return ;
    }
    if(L

좋은 웹페이지 즐겨찾기