zoukankan      html  css  js  c++  java
  • hdu1541树状数组(降维打击)

    题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1541/

    题意是:在二维图上有一系列坐标,其中坐标给出的顺序是:按照y升序排序,如果y值相同则按照x升序排序。这个信息十分关键,所以借此我们可以知道最新给出点A(x,y)之后,y大于等于任何之前点的y值,所以只要知道之前点的x值有多少个是小于等于x就能得知新给出的点的等级,所以不必用二维的树状数组来实现,而且二维树状数组的空间不够。我们只要将其降维即可。

    代码如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef unsigned int ui;
     4 typedef long long ll;
     5 typedef unsigned long long ull;
     6 #define pf printf
     7 #define mem(a,b) memset(a,b,sizeof(a))
     8 #define prime1 1e9+7
     9 #define prime2 1e9+9
    10 #define pi 3.14159265
    11 #define scand(x) scanf("%llf",&x) 
    12 #define f(i,a,b) for(int i=a;i<=b;i++)
    13 #define scan(a) scanf("%d",&a)
    14 #define dbg(args) cout<<#args<<":"<<args<<endl;
    15 #define pb(i) push_back(i)
    16 #define ppb(x) pop_back(x)
    17 #define inf 0x3f3f3f3f
    18 #define maxn 35005
    19 int n,m,t,x,y;
    20 int c[maxn],level[maxn];
    21 int lowbit(int x)
    22 {
    23     return x&(-x);
    24 }
    25 int query(int x)
    26 {
    27     int ans=0;
    28     for(int i=x;i>0;i-=lowbit(i))
    29     {
    30         ans+=c[i];
    31     }
    32     return ans;
    33 }
    34 void update(int x,int C)
    35 {
    36     for(int i=x;i<=maxn;i+=lowbit(i))
    37     {
    38         c[i]+=C;
    39     }
    40 }
    41 int main()
    42 {
    43     //freopen("input.txt","r",stdin);
    44     //freopen("output.txt","w",stdout);
    45     std::ios::sync_with_stdio(false);
    46     while(scan(n)!=EOF)
    47     {
    48         mem(level,0);
    49         mem(c,0);
    50         f(kk,1,n)
    51         {
    52             scan(x);
    53             scan(y);
    54             int tmp=query(++x);
    55         //    dbg(tmp);
    56             level[tmp]++;
    57             update(x,1);    
    58         }
    59         f(i,0,n-1)
    60             {
    61                 pf("%d
    ",level[i]);
    62             }
    63     }
    64  } 
  • 相关阅读:
    移动端,多屏幕尺寸高清屏retina屏适配的解决方案
    angular 关于 factory、service、provider的相关用法
    2016最新手机号码正则、身份证JS正则表达式
    凸包总结
    BZOJ 3653: 谈笑风生(DFS序+可持久化线段树)
    BZOJ 3652: 大新闻(数位DP+概率论)
    BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
    纪中集训 Day 8 & Last Day
    纪中集训 Day 7
    纪中集训 Day 6
  • 原文地址:https://www.cnblogs.com/randy-lo/p/12437092.html
Copyright © 2011-2022 走看看