2481这道水题坑了我三天。。。。。数组超界10W让我的6.0崩溃了。。。。然后由于不懂。。。重装了一边。。。。

不扯了。。。讲思想。。

把s看成x,e看成y,于是,每次输入就相当于输入一组点,看了网上的攻略,知道了按x排序会超时(这里要先按一个关键字排序),于是我就建立一个yox的坐标系(y为横坐标)按y为关键字,从大到小排序

简单画图,就会发现,我们要求出的值为每个点左上方的点的个数。

对每个点的x坐标值 作为树状数组下标,进行累加,然后再用一个数组resr对应原本输入次序的点

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <queue>
#include <fstream>using namespace std;
#define N 100005 typedef struct _node
{int x;int y;int id;
}NODE , *PTNODE;int n;
NODE node[N];
int resr[N];
int tree[N];
const int max_n = 100001;bool cmp( const NODE& a , const NODE& b )
{if( a.y != b.y )return a.y > b.y ;return a.x < b.x;
}int lowb( int idx ){ return idx&(-idx); }
void up_add( int idx , int x )
{ for( ; idx < max_n ; tree[idx] += x , idx += lowb(idx) ); }
int sum( int idx )
{int res = 0;for( ; idx > 0 ; res += tree[idx] , idx -= lowb(idx) );return res;
}int main()
{int i,j;//ifstream fin;//fin.open("concavie.txt");while( ~scanf("%d",&n) ){memset( node , 0 , sizeof(node) );memset( resr , 0 , sizeof(resr) );memset( tree , 0 , sizeof(tree) );for( i = 1 ; i <= n ; i++ ){scanf("%d%d", &node[i].x , &node[i].y);//fin >> node[i].x >> node[i].y;node[i].x++;node[i].y++;//node[i].x = max_n - node[i].x;//node[i].y = max_n - node[i].y;node[i].id = i;}sort( node+1 , node+n+1 , cmp );//for( i = 1 ; i <= n ; i++ )//  cout << node[i].id << ' ' << node[i].x-1 << ' ' << node[i].y-1 << endl; //  cout << endl;up_add( node[1].x , 1 );for( i = 2 ; i <= n ; i++ ){if( node[i].x == node[i-1].x && node[i].y == node[i-1].y )resr[ node[i].id ] = resr[ node[i-1].id ];else resr[ node[i].id ] = sum( node[i].x );up_add( node[i].x , 1 );}cout << resr[1];for( i = 2 ; i <= n ; i++ )cout << ' ' << resr[i];cout << endl;}return 0;
}

hdu 2481 树状数组 双关键字排阻相关推荐

  1. HDU 4358 树状数组+思路

    http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...

  2. hdu 4991(树状数组优化dp)

    Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  3. hdu 1166 树状数组解

    树状数组解决   (关于树状数组参考大佬的博客https://www.cnblogs.com/hsd-/p/6139376.html) 然后就很好理解这题了,代码附上 /*hdu 1166 单点修改, ...

  4. hdu 3333 树状数组+离线处理

    思路:既然要求的是不同的元素的和,那么我们可以想办法让每个值在区间中只出现一次,于是想到了离线的算法:将查询按照右端点排序,位置在右端点之前的元素都插入到树状数组中,对于已经出现过的值,我们要先删除( ...

  5. hdu 4417(树状数组+离线算法)

    解题思路:这道题要求某区间内比h小的个数,其实这里可以类似于树状数组求逆序数那样.关键是如何转换成树状数组的模型,这才是本题的难点. 我们首先分析,如果知道h在该区间的哪个位置,那么剩下的就很好做了. ...

  6. hdu 1394(树状数组求逆序数)

    解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...

  7. Weak Pair HDU - 5877 树状数组+离散化+DFS遍历

    题意 给我们一颗有根有向树 以及每个点得权值a[1]~a[n] 需要我们求出在这颗树种有多少对满足以下两个条件的pair (1)u是v的祖先节点 (2)a[u]*a[v]<= k N<=1 ...

  8. hdu 4970 树状数组 “改段求段”

    题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...

  9. hdu 1541 树状数组版)——咯咯

    /*树状数组版*/ #include<stdio.h> #include<string.h> #define L 32005 #define N 15005 int tree[ ...

最新文章

  1. Nginx, HTTPS的配置
  2. 开年趣图汇总:对不起,让你笑了这么久
  3. u 20ubuntu 安装 postfix_极力推荐和田咨询问题U型钢托盘厂家
  4. C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网
  5. 【job】面试中常见的笔试梳理
  6. 如何在Docker中列出容器
  7. Ubuntu怎么从图形桌面切换到命令行界面
  8. vmvare虚拟机地址总是更换的解决方法
  9. python3详细安装教程
  10. Twaver-HTML5基础学习(14)连线(Link)连线类型(直线、延伸直线、正交直线)
  11. SE96X、CM500-I27条码扫描引擎使用经验
  12. html写的3d烟花带字幕,Three.js 3D烟花绽放动画
  13. HBase 数据库检索性能优化策略
  14. 大学物理-震动波动光学
  15. 心蓝12306订票助手
  16. C语言数据交换算法和伪指令,补充:单片机c语言与汇编语言混合编程.ppt
  17. 全志H3-NanoPi开发板SDK之一总体概述
  18. 【Java基础】Java输入输出(IO)流
  19. JSP基础语法-动作(Action)
  20. Unity实现围绕另一物体旋转

热门文章

  1. 【CloudShell】阿里云壳EDR卸载指南
  2. C#中调用OCX控件
  3. 数据结构——什么是数据结构?
  4. 模拟电路学习-之容抗和感抗
  5. 物联网案例_讨论物联网采用的商业案例
  6. linux外接HDMI显示器 不能正常显示的问题
  7. Fragstats景观分析研究
  8. Identifying App Installations
  9. python综合程序设计——做一个可视化大屏
  10. 做一个广告业务后台需要几天,5天吗?不,用PhalApi开源框架,1天就能做好