zoukankan      html  css  js  c++  java
  • 树状数组——pku2481

    先按s从小到大排序
    若相同再按E从大到小
    在点相同时要特殊处理
    View Code
    #include<cstdio>
    #include
    <iostream>
    #include
    <algorithm>
    using namespace std;

    int n;
    int tree[200009];
    int all[200009];
    int temp[200009];

    struct data
    {
    int l,r;
    int no;
    }node[
    200009];

    int lowbit(int x)
    {
    return x&(-x);
    }

    void updata(int x,int c)
    {
    int i;
    for(i=x;i<=n;i+=lowbit(i))
    {
    tree[i]
    +=c;
    }
    }

    int getsum(int x)
    {
    int i;
    int temp=0;
    for(i=x;i>=1;i-=lowbit(i))
    {
    temp
    +=tree[i];
    }
    return temp;
    }

    int cmp(data a,data b)
    {
    if(a.l==b.l)
    return a.r>b.r;
    else
    return a.l<b.l;
    }

    int main()
    {
    n
    =100000;
    int t;
    while(scanf("%d",&t),t)
    {
    int i;

    for(i=1;i<=100000;i++)
    {
    tree[i]
    =0;
    all[i]
    =0;
    }

    for(i=1;i<=t;i++)
    {
    scanf(
    "%d%d",&node[i].l,&node[i].r);
    node[i].no
    =i;
    }

    sort(
    &node[1],&node[t+1],cmp);

    for(i=1;i<=t;i++)
    {
    if(node[i].l!=node[i-1].l||node[i].r!=node[i-1].r)//如果改点与前面的不同
    all[i]=getsum(n)-getsum(node[i].r-1);
    else//若相同的话
    all[i]=all[i-1];
    updata(node[i].r,
    1);
    }


    for(i=1;i<=t;i++)
    {
    temp[node[i].no]
    =all[i];
    }
    printf(
    "%d",temp[1]);
    for(i=2;i<=t;i++)
    {
    printf(
    " %d",temp[i]);
    }
    printf(
    "\n");
    }
    }

      

  • 相关阅读:
    获取当前时区时间
    python lambda表达式详解
    Odoo 12开发之开发环境准备
    初步了解odoo12
    web前端面试题
    实现一个优先级队列
    面试题
    python读取和生成excel文件
    Django基础
    virtualenv
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2108238.html
Copyright © 2011-2022 走看看