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 理解 ...
随机推荐
- Spring MVC常用注解
cp by http://www.cnblogs.com/leskang/p/5445698.html 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由Di ...
- glob模式
在学习gulp的过程中,gulp使用了被称作为glob的文件匹配模式. 接下来我们认识下什么是glob模式. 在计算机编程中,特别是类Unix环境,glob模式通过通配符来匹配文件名.例如:Unix命 ...
- 如何通过命令行创建和设置一个MySQL用户
我想要在MySQL服务器上创建一个新的用户帐号,并且赋予他适当的权限和资源限制.如何通过命令行的方式来创建并且设置一个MySQL用户呢? 要访问一个MySQL服务器,你需要使用一个用户帐号登录其中方可 ...
- Bestcoder Round 47 && 48
1.Senior's Array(hdu 5280) 题目大意:给出大小为N的数组和P,求将数组中的某个元素替换为P后的最大连续子段和.N<=1000 题解: 1.送分题,比赛的时候只想到枚举替 ...
- c# 中int.ToString()的格式化的示例
格式化数值:有时,我们可能需要将数值以一定的格式来呈现,就需要对数值进行格式化.我们使用格式字符串指定格式.格式字符串采用以下形式:Axx,其中 A 为格式说明符,指定格式化类型,xx 为精度说明符, ...
- 易云盘(nester)-面对企业的和团队文档管理的平台
易云盘(nester)是本人的另外一款作品,先前开发和维护的在线设计工具Visor也已经合并在Nester的最新版里了. 目前作为共享版发布. 特点 Nester后端是以Spring Framewor ...
- C#自定义属性(跟成员变量的区别)
属性声明 public int age { get; set; } 从功能上等价于 private int m_age; public int age {get { return m_age; }se ...
- hdu 1503, LCS variants, find a LCS, not just the length, backtrack to find LCS, no extra markup 分类: hdoj 2015-07-18 16:24 139人阅读 评论(0) 收藏
a typical variant of LCS algo. the key point here is, the dp[][] array contains enough message to de ...
- android editText 监听事件
在软键盘中注意 在监听的 edittext中 使用android:imeOptions属性的时候,一定要对EditText设置 android:inputType 或者 设置 android:sing ...
- c4,configure the debug environment
Yesterday I found a tiny C compiler (less than 600 line of C code, containing commits) called " ...