hdu4638Group
http://acm.hdu.edu.cn/showproblem.php?pid=4638
求某一区间所包含的连续的段 对于乱序的数 到了i这个数所包含的段数 首先把这个数看作单独的段 再看一下前面是否出现了它的朋友 若出现了就说明前面已经加过这样单独的段了 就把前面的更新掉-1 这样始终保证一个段的最后一个值记录着这是第几个段 从左到右扫描一遍 离线处理后 这样用树状数组或者线段树进行区间求和就可以了
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#define N 100010
using namespace std;
#define lowbit(x) (x&(-x))
int p[N],a[N],re[N],ans[N],n;
struct node
{
int l,r,id;
}q[N];
bool cmp(node a,node b)
{
return a.r<b.r;
}
void add(int x,int da)
{
while(x<=n)
{
re[x]+=da;
x+=lowbit(x);
}
}
int getsum(int x)
{
int s=;
while(x)
{
s+=re[x];
x-=lowbit(x);
}
return s;
}
int main()
{
int i,j,m,t;
cin>>t;
while(t--)
{
scanf("%d%d",&n,&m);
memset(re,,sizeof(re));
for(i = ; i <= n ; i++)
{
scanf("%d",&a[i]);
p[a[i]] = i;
}
for(i = ; i <= m ;i++)
{
scanf("%d%d",&q[i].l,&q[i].r);
q[i].id = i;
}
sort(q+,q+m+,cmp);
j = ;
for(i = ; i <= n ;i++)
{
add(i,);
if(a[i]<n&&p[a[i]+]<i)
add(p[a[i]+],-);
if(a[i]>&&p[a[i]-]<i)
add(p[a[i]-],-);
while(j<=m&&q[j].r==i)
{
int x = getsum(q[j].r);
int y = getsum(q[j].l-);
ans[q[j].id] =x - y;
j++;
}
}
for(i = ; i <= m ; i++)
printf("%d\n",ans[i]);
}
return ;
}
hdu4638Group的更多相关文章
- hdu-4638-Group(树状数组)
题意 找到区间里有多少组连续数字串 分析: (转)思路:显然,我们要使得value最大,就要尽量将连续的ID分在一组,所以问题转化为求一个区间中连续ID区间的个数.我们从左往右扫描,依次考虑右端点为i ...
随机推荐
- PHP中使用Luhn算法校验信用卡及借记卡卡号
Luhn算法会通过校验码对一串数字进行验证,校验码通常会被加到这串数字的末尾处,从而得到一个完整的身份识别码. 我们以数字“7992739871”为例,计算其校验位: 从校验位开始,从右往左,偶数位乘 ...
- [大牛翻译系列]Hadoop系列性能部分完结
Hadoop系列性能部分完结.其它的部分发布时间待定. Hadoop系列将不再一日一篇,开始不定期发布.
- 关于HTML代码的转义
笔记: 1.在通过jsonp方式传输HTML代码的时候,为了防止代码中的一些字符影响json的语法,需要对HTML代码进行转义. 2.转义的时候可以只转义特殊字符(引号之类的),也可以把所有字符(中文 ...
- Spark小课堂Week6 启动日志详解
Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Strea ...
- 扩展ServiceHost<T>类
public class ServiceHost<T> : ServiceHost { public void EnableMetadataExchange(bool enableHttp ...
- 【转】perl如何避免脚本在windows中闪一下就关闭
写好了perl程序,运行后,准备等待结果输出时,结果双击后,看到屏幕闪了一下,然后什么都没有了,根本没有机会然你看到输出的结果 当你刚开始学习perl的时候,写好了程序,准备兴高采烈的等待结果输出时, ...
- gridView AspNetPager 翻页时 弹出窗体关闭报错
gridView AspNetPager 翻页后,你右击刷新或F5会发现弹出一个刷新页面. 这是因为默认翻页都是用dopostback方式回发的.因为这时的页面已经不是原来的页面.所以会弹出提示. 这 ...
- 半小时学会上传本地项目到github
半小时学会上传本地项目到github 闲着无聊写给那些正在学习怎么上传本地项目到github的同学. 开始学习 一.创建github账号 好吧,这步多余了. 二.创建个人仓库 三.配置SSH keys ...
- .NET安装和配置Oracle数据访问组件(ODAC)
Many ASP.NET applications access Oracle database for the data source. Oracle supports the .NET with ...
- 【css】 收藏 纯css打造 mackbook air
http://www.cnblogs.com/myvin/p/4621231.html <html lang="en"> <head> <meta c ...