POJ 2481-树状数组
题意:给定几个区间,判断该区间是其余区间的真子集个数。
分析:真子集即寻找x,y满足a(小于或等于x),b(大于或等于y)的区间。跟star-POJ2352很类似。
转化:star那个题目是x,y都是从小到大排序,然后直接求y序列前边比y小的数字个数。这个就需要x从小到大排,y从大到小排,然后求y序列的前边比当前更大的y值。其实也是序号 - 前边比当前更小的y值。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = ;
int c[MAXN];
int ans[MAXN];
int n;
struct S
{
int x,y,pos;
bool operator < (const S &a) const
{
if(x == a.x)
return y > a.y;
else
return x < a.x;
}
} a[MAXN];
int lowbit(int x)
{
return x&(-x);
}
int getsum(int i)
{
int s=;
while(i>)
{
s += c[i];
i -= lowbit(i);
}
return s;
}
void add(int li, int val)
{
while(li<=MAXN)
{
c[li] += val;
li += lowbit(li);
}
}
int main()
{
///找前边有几个x,y都比当前小的
while(scanf("%d",&n),n)
{
memset(c,,sizeof(c));
memset(ans,,sizeof(ans));
for(int j=; j<n; j++)
{
scanf("%d%d",&a[j].x,&a[j].y);
a[j].x++;
a[j].y++;
a[j].pos = j ;
}
sort(a,a+n);
ans[a[].pos] = getsum(a[].x); //ans[]代表各点的sum()
add(a[].x, );
for(int i = ; i < n; i++)
{
if(a[i].x == a[i-].x && a[i].y == a[i-].y) //若两区间相等
ans[a[i].pos] = ans[a[i-].pos]; //该值等于上一个的值
else
ans[a[i].pos] = getsum(a[i].x);
add(a[i].x, ); //更新该点x值
}
printf("%d", ans[]);
for(int i = ; i < n; i++)
printf(" %d", ans[i]);
printf("\n");
}
return ;
}
WA Code
POJ 2481-树状数组的更多相关文章
- Cows(poj 2481 树状数组)
Cows Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 15301 Accepted: 5095 Description ...
- Cows POJ - 2481 树状数组
Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can ...
- POJ 3321 树状数组(+dfs+重新建树)
Apple Tree Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27092 Accepted: 8033 Descr ...
- POJ 2352Stars 树状数组
Stars Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 42898 Accepted: 18664 Descripti ...
- poj 2299 树状数组求逆序数+离散化
http://poj.org/problem?id=2299 最初做离散化的时候没太确定可是写完发现对的---由于后缀数组学的时候,,这样的思维习惯了吧 1.初始化as[i]=i:对as数组依照num ...
- poj 3928 树状数组
题目中只n个人,每个人有一个ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判的ID和技能值都在两个选手之间的时候才能进行一场比赛,现在问一共能组织多少场比赛. 由于排完序之后,先插入的一定 ...
- POJ 2299 树状数组+离散化求逆序对
给出一个序列 相邻的两个数可以进行交换 问最少交换多少次可以让他变成递增序列 每个数都是独一无二的 其实就是问冒泡往后 最多多少次 但是按普通冒泡记录次数一定会超时 冒泡记录次数的本质是每个数的逆序数 ...
- poj 2299 树状数组求逆序对数+离散化
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 54883 Accepted: 20184 ...
- poj 2182 树状数组
这题对于O(n^2)的算法有很多,我这随便贴一个烂的,跑了375ms. #include<iostream> #include<algorithm> using namespa ...
- POJ 2352 树状数组
学习自:链接以及百度百科 以及:https://www.bilibili.com/video/av18735440?from=search&seid=363548948825132979 理解 ...
随机推荐
- php知识案列1
用PHP,在1-20间随机产生5个不重复的值,如何做 复制代码 代码如下: <?php function NoRand($begin=0,$end=20,$limit=5){ $rand_arr ...
- WebAPI返回数据类型解惑
本文来自:http://www.cnblogs.com/lzrabbit/archive/2013/03/19/2948522.html 最近开始使用WebAPI,上手很容易,然后有些疑惑 1.Web ...
- CentOS_7.2安装Redis_3.0
一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...
- BZOJ3000 Big Number
由Stirling公式: $$n! \approx \sqrt{2 \pi n} (\frac{n}{e})^n$$ 故:$$\begin{align} ans &= log_k n! + 1 ...
- [原创]WinForm分页控件制作
先简单说一下思路: 1.做一个分页控件的导航类,即记录总页数.当前页.每页记录数,下一页.上一页.跳转等操作的页数变更. class PageNavigation{/// <summary> ...
- RP4412开发板在Android系统编译生成ramdisk-uboot.img
荣品RP4412开发板在android系统编译的时候,怎么生成ramdisk-uboot.img生成流程分析: mkimage -A arm -O linux -T ramdisk -C none - ...
- WebApi系列~基于RESTful标准的Web Api
微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码 ...
- 数据表格datagrid内容整理
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- linux环境下安装oracle数据库 原文在卡卡100http://www.cnblogs.com/kaka100
centos55_oracle11gr2_install 第一个阶段:安装centos55 a:安装centos5.5 用图形界面安装 硬盘 16G 注意:用图形界面安装.. 第二个阶段:配 ...
- JQuery设置时间段下拉选择 时间下拉选择
$(document).ready(function() { var arrT = []; var tt = "{0}:{1}"; for (var i = 0; i < 2 ...