1. 程式人生 > >POJ:2481 Cows

POJ:2481 Cows

這題個人感覺不錯,乍一看是個區間覆蓋問題,其實是用樹狀陣列求逆序數。

但是有些地方要注意。所謂stronger是指一個區間可以完全覆蓋另一個區間,如果這倆區間完全相同是不算的。

按x左邊升序排序,如果x相同y要降序排序。

在用樹狀陣列的時候要注意了,假設區間為p[],我們這裡是求p.y的逆序數,其實也要考慮p.x。

假設當前區間的下標為i(i從1開始),那麼p[i]前一個元素的下標為i-1。

如果p[i]!=p[i-1],那麼說明p[i-1].x是比p[i].x小的,這樣的話p[i-1]是否比p[i]strong只取決於y,在i之前出現的只要比p[i].y大或者相等的都是比p[i]strong的。

如果p[i]==p[i-1],那麼說明這倆區間完全相同,那麼比p[i]strong的數目就是和p[i-1]的相同了。

題目中有說明不存在左右區間相當的情況,所以不會有0 0這種超時資料。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
struct Point
{
    int x,y,num;
    Point():x(0),y(0),num(0) {}
};
bool cmp(Point a,Point b)
{
    if(a.x==b.x) return a.y>b.y;
    return a.x<b.x;
}
int a[100005],ans[100005],n,N;
Point p[100005];
int lowbit(int x)
{
    return (-x)&x;
}
int Sum(int pos)
{
    int sum=0;
    while(pos>0)
    {
        sum+=a[pos];
        pos-=lowbit(pos);
    }
    return sum;
}
void Add(int pos,int val)
{
    while(pos<=N)
    {
        a[pos]+=val;
        pos+=lowbit(pos);
    }
}
int main()
{
    while(scanf("%d",&n)&&n)
    {
        memset(a,0,sizeof(a));
        memset(ans,0,sizeof(ans));
        N=0;
        for(int i=1; i<=n; ++i)
        {
            scanf("%d%d",&p[i].x,&p[i].y);
            p[i].num=i;
            N=max(N,p[i].y);
        }
        sort(p+1,p+n+1,cmp);
        for(int i=1; i<=n; ++i)
        {

            if(p[i].x==p[i-1].x&&p[i].y==p[i-1].y)
            {
                ans[p[i].num]=ans[p[i-1].num];
                Add(p[i].y,1);
            }
            else
            {
                ans[p[i].num]=i-1-Sum(p[i].y-1);
                Add(p[i].y,1);

            }
        }
        for(int i=1; i<=n; ++i)
            if(i==1) printf("%d",ans[i]);
            else printf(" %d",ans[i]);
        printf("\n");
    }
    return 0;
}

相關推薦

POJ 2481 Cows (線段樹)

max lan rgb query deb ons stack rep memset Cows 題目:http://poj.org/problem?id=2481 題意:有N頭牛,每僅僅牛有一個值[S,E],假設對於牛i和牛j來說,它們的值滿足以下的條件則證明牛i比

POJ 2481 Cows

efi lov ssi print style one 原來 idg inpu 題目鏈接:http://poj.org/problem?id=2481 解題思路:可以先嘗試HDU 1541 Stars 。這道題相當於Stars的變形,只不過需要稍微思考。按E從大到小排序,E

POJ 2481 Cows【樹狀數組】

sync sum for set inf opera () col bsp 從8月初就看到了這題,今天猛然想起來,然後把補上了 #include<iostream> #include<cstdio> #include<cstring>

#樹狀陣列# POJ 2481 Cows

Description Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensional num

POJ 2481.Cows【樹狀陣列】【5月10】

Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15943 Accepted: 5308 Description Farmer John's cows have discovered

POJ 2481 Cows 樹狀陣列 單點更新 (每個集合是幾個集合的真子集)

Description Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensi

poj 2481 Cows 【樹狀陣列】

Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15386 Accepted: 5128 Description Farmer John's cows have discover

POJ 2481 Cows(樹狀陣列:區間真子集的個數)

Cows Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 23460   Ac

POJ:2481 Cows

這題個人感覺不錯,乍一看是個區間覆蓋問題,其實是用樹狀陣列求逆序數。 但是有些地方要注意。所謂stronger是指一個區間可以完全覆蓋另一個區間,如果這倆區間完全相同是不算的。 按x左邊升序排序,如果x相同y要降序排序。 在用樹狀陣列的時候要注意了,假設區間為p[],我們這

POJ 3348 Cows 凸包 求面積

ron ons ref ems problem str win tdi 一個點 LINK 題意:給出點集,求凸包的面積 思路:主要是求面積的考察,固定一個點順序枚舉兩個點叉積求三角形面積和除2即可 /** @Date : 2017-07-19 16:07:

POJ 3348 Cows | 凸包模板題

nor clas body 模板 block ron pac ring 進行 題目: 給幾個點,用繩子圈出最大的面積養牛,輸出最大面積/50 題解: Graham凸包算法的模板題 下面給出做法 1.選出x坐標最小(相同情況y最小)的點作為極點(顯然他一定在凸包上) 2.

[poj] 3348 Cows || 求凸包面積

post sort while swa 多邊形 sca cpp name graham 原題 給出n個點,求得到凸包的面積 多邊形面積顯然很好求,就是鄰邊叉積之和/2。 問題在於怎麽求凸包上有哪些點。凸包顯然每個點都要在前兩個點連線的左邊(也就是逆時針位置),所以: 1、

poj 2481

為我 farmer end ace icu which ron border his Language: Default Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions:

poj 3348 Cows (求凸包的面積)

題目連結:poj 3348 題意:給出n個點,問能用這n個點最多能圍成多少面積,一頭牛需要50平方米的地盤,求最多能容納多少頭牛? 題解:直接求這n個點的凸包,最後計算下面積就行了。   #include<cstdio> #include<algori

2481 Cows

Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensional number

POJ 3348 Cows

opera poj mat int() pre tdi name {} 面積 簡單的求凸多邊形面積 求不規則多邊形也是類似 只要選擇的點是沿著多邊形邊選就行了 通過容斥會得到正確答案 #include<cmath> #include<cs

POJ 2182 Lost Cows 巧妙解法

instead water desc ble body str mission visit sort                       題目                                      Lost Cows Time Limit

POJ 3621 Sightseeing Cows(最優比例環+SPFA檢測)

span fort exp ros 說明 6.0 lines choice stdio.h Sightseeing Cows Time Limit: 1000MS Memory Limit: 65536K Total Submission

POJ 2181 -- Jumping Cows

single namespace class table art memory 但是 incr efi Jumping Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissi

POJ - 2456 :Aggressive cows

num sta john name ams end lang key 二分 Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are loca