关闭

hdu5862树状数组 离散化

135人阅读 评论(0) 收藏 举报
分类:
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <map>
#define maxn 100010
#define cle(a) memset(a,0,sizeof(a))
using namespace std;
typedef long long ll;
struct node
{
    int type,x,y,y2;
} nod[maxn*2];
int a[maxn*2];
int Maxn;
bool cmp(node a,node b)
{
    if(a.x==b.x)return a.type<b.type;
    return a.x<b.x;
}
int c[maxn*2];
int lowbit(int i)
{
    return i&(-i);
}
void add(int i,int d)
{
    while(i<=Maxn)
    {
        c[i]+=d;
        i+=lowbit(i);
    }
}
int sum(int i)
{
    int ans=0;
    while(i>0)
    {
        ans+=c[i];
        i-=lowbit(i);
    }
    return ans;
}
map<int,int>mp;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        mp.clear();
        int n,tot=0;
        int all=1;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            int x1,x2,y1,y2;
            scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
            if(x1==x2)//竖线
            {
                if(y1>y2)swap(y1,y2);
                nod[tot++]= {1,x1,y1,y2};
                a[all++]=y1;
                a[all++]=y2;
            }
            else
            {
                if(x1>x2)swap(x1,x2);
                nod[tot++]= {0,x1,y1,1};
                nod[tot++]= {0,x2+1,y2,-1};
                a[all++]=y1;
            }
        }
        sort(a+1,a+all);
        int cnt=0;
        for(int i=1; i<=all; i++)//y轴离散化
        {
            if(!mp[a[i]])mp[a[i]]=++cnt;
        }
        Maxn=cnt+1;
        sort(nod,nod+tot,cmp);
        ll ans=0;
        cle(c);
        for(int i=0; i<tot; i++)
        {
            if(nod[i].type==0)
            {
                int xpy=mp[nod[i].y];
                add(xpy,nod[i].y2);
            }
            else
            {
                int xpl=mp[nod[i].y];
                int xpr=mp[nod[i].y2];
                ans+=sum(xpr)-sum(xpl-1);
            }
        }
        printf("%lld\n",ans);
    }
    return 0;
}
0
0
查看评论

树状数组--离散化

- 二分 Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit...
  • idealistic
  • idealistic
  • 2016-08-17 09:35
  • 326

离散化+树状数组求逆序数

题目:POJ2299   离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0---999 999 999;显然数组不肯能这么 大;而N的最大范围是500 000;故给出的数一定可以与1.。。。N建立一个一一映射; 这里用一个结构体...
  • ACdreamers
  • ACdreamers
  • 2013-01-19 14:52
  • 4244

hdu 5792 离散化+树状数组

链接:戳这里 World is Exploding Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr...
  • libin66
  • libin66
  • 2016-08-02 21:27
  • 871

hdu4325 树状数组+离散化

http://acm.hdu.edu.cn/showproblem.php?pid=4325 Problem Description As is known to all, the blooming time and duration varies between different...
  • u013573047
  • u013573047
  • 2015-02-06 10:09
  • 1059

POJ-2299-树状数组,离散化

题目大意:求一组数的逆序数有多少个; 题目解析: 用树状数组做,向下更新,向上求和; AC代码: #include #include #include #include #include using namespace std; typedef long long ll; const int max...
  • zyz_3_14159
  • zyz_3_14159
  • 2017-04-16 21:24
  • 151

HDU5862(树状数组好题)

题意:给一些平行坐标轴的线段,。统计相交数 题解:可以这样考虑,把所有与x轴平行的线段存起来,用来枚举。把与y轴平行的线段的左右端点存起来。这样在枚举x线段时。就需要看x线段的左端点左边有多少,右端点有多少,相减就是中间重合的。如何维护这些数据呢?当然就得用树状数组了。,简单粗暴#include ...
  • nucshiyilang
  • nucshiyilang
  • 2017-07-21 21:37
  • 57

hdu5862树状数组加扫描线

树状数组加扫描线的思想 #include <iostream> #include <cstring> #include <cstdlib> #include <stdio.h> #include <algorithm> #include &...
  • yp_2013
  • yp_2013
  • 2016-08-18 23:05
  • 240

特征离散化系列(一)方法综述

对现存的离散化方法进行概述总结,对现有离散化方法进行归类的层次化结构描述(hierarchical framework),为进一步发展铺路(pave the way),对典型的离散化方法(representative discretization methods)的简要讨论,大量的试验和分析,在不同...
  • CalCuLuSearch
  • CalCuLuSearch
  • 2016-10-07 18:56
  • 4353

离散化黑科技

为什么要离散化当以权值为下标的时候,值太大,存不下。 然后把要离散化的每一个数组里面的数映射到另一个值小一点的数组里面去。平常的离散化平常用c++打的离散化,要排个序,有时还要打一个struct存起来。 好麻烦!神奇的黑科技void lisan(int *x){//首先c++调用一个数组直接打这...
  • doyouseeman
  • doyouseeman
  • 2016-04-14 19:02
  • 1843

数据预处理之数据离散化

数据离散化的意义数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。数据离散化的原因主要有以下几点:1**.算法需要:**比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。如果要使用该类算法,必须将离散型的数据进行。有效的离散化能减小算...
  • xzfreewind
  • xzfreewind
  • 2017-08-11 20:23
  • 635
    个人资料
    • 访问:39560次
    • 积分:2332
    • 等级:
    • 排名:第18939名
    • 原创:201篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论