程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj-3277-City Horizon-離散化+線段樹區域更新

poj-3277-City Horizon-離散化+線段樹區域更新

編輯:C++入門知識

先把坐標離散化,然後進行線段樹區域更新。

更新的時候應該注意先更新矮的,然後讓高的覆蓋矮的。

時間復雜度為O(n*log(n))

注意long long

注意線段樹的空間長度應該開為maxn*2*4

#include
#include
#include
#include
#include
#include
#define INF 1000000
#define LL long long
#define maxn  80200
using namespace std;
struct list
{
    int l;
    int r;
    int h;
}node[maxn*4+10];
struct lose
{
    int x;
    int y;
    int h;
    bool friend operator < (const lose a, const lose b)
    {
        return a.hx)r=mid;
        if(xx[mid]mid )insert(l,r,h,num*2+2);
    else if(r<=mid)insert(l,r,h,num*2+1);
    else
    {
        insert(l,mid,h,num*2+1);
        insert(mid+1,r,h,num*2+2);
    }
}
int search(int x,int num)
{
    int a=node[num].l;
    int b=node[num].r;
    int mid=(a+b)/2;
    if(node[num].h!=0)return node[num].h;
    if(a==b)
    {
        return 0;
    }
    if(x<=mid)return search(x,num*2+1);
    else return search(x,num*2+2);
}
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved