poj3109(树状数组+扫描线)

总的来说就是将x标记然后一条条y扫描并用树状数组处理

#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=200000+100;
struct node
{
    int x;
    int y;
}p[maxn];
int a[maxn];
int b[maxn];
int n,cur;
bool vis[maxn],l[maxn],r[maxn];
bool cmp(node u,node v)
{
    if(u.y==v.y)
        return u.x0)
    {
        ans+=a[k];
        k-=low(k);
    }
    return ans;
}

void init()//预处理
{
    memset(a,0,sizeof(a));//初始化树状数组
    sort(b,b+cur);
    cur=unique(b,b+cur)-b;//排序,离散化    //b-重复元素 
    //cout<=0;i--)
    {
        if(!vis[p[i].x])//第k个点的x坐标在上方出现第一次出现
        {
            r[i]=1;
            vis[p[i].x]=1;
        }
        else
        r[i]=0;
    }
}


void solve()
{
    long long ans=0;
    for(int i=0;i

 

你可能感兴趣的:(树状数组)