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 理解 ...
随机推荐
- List接口、Set接口、Map接口的方法
一.Collection接口中的方法介绍 int size();返回此Collection中的元素数 boolean isEmpty(); 判断是否为空 boolean containsAll(Col ...
- Redis一个异常的解决办法,异常描述:Could not get a resource from the pool
异常描述: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the poo ...
- PHP浮点数计算
涉及到计算 和金额交易 使用bc系列函数 高精度计算 不会有0.57不精确的问题
- java selenium (二) 环境搭建方法一
webdriver 就是selenium 2. webdriver 是一款优秀的,开源的,自动化测试框架. 支持很多语言. 本文描述的是用java Eclipse 如何搭建环境 阅读目录 ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(二)
前言 写完第一篇后,我一直在想接下来应该从哪一方面开始讲.后来我觉得不用那么死板的把每一个课程和大纲都列出来吧,毕竟我又不是教书的,呵呵...我觉得就像做实验一样,我们一部分一部分的完成,最后总个结果 ...
- pthreads 2.0.10 test
CentOS 6.3 cd /root mkdir pthreads //get php-5.6 and install zts version wget cn2.php.net/get/php-5. ...
- 使用wex5得到的一些教训
博主一直都是做web开发,前段时间有个小想法,想给自己做个android小应用(很小,功能特别简单). 了解到可以用js直接做,貌似很简单,选用了wex5(基于codova插件)来直接开发. 最终发现 ...
- iOS中真机连接电脑运行程序出现问题
- 5.String
一.古罗马皇帝凯撒在打仗时曾经使用过一种方法加密军事情报.请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 设计思想:先提示用户进行的操作是加密还是解密,用户输入一个字符串,加密时将前23个 ...
- selenium问题记录
错误一: 错误信息:Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output: 原 ...