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的更多相关文章

  1. hdu-4638-Group(树状数组)

    题意 找到区间里有多少组连续数字串 分析: (转)思路:显然,我们要使得value最大,就要尽量将连续的ID分在一组,所以问题转化为求一个区间中连续ID区间的个数.我们从左往右扫描,依次考虑右端点为i ...

随机推荐

  1. 使用saltstack批量部署服务器运行环境事例——批量部署nagios客户端

    之前关于搭建web服务器集群实验的这篇文章http://www.cnblogs.com/cjyfff/p/3553579.html中,关于如何用saltstack批量部署服务器这一点当时没有记录到文章 ...

  2. JS禁用浏览器退格键

    我们在真实的项目开发中经常会使用JS 对键盘上的一些按键进行禁用,常见的比如说退格键(backspace/ 后退键),我在一个项目中就遇到过在页面编辑的时候禁用掉退格键,因为退格键会发生页面后退,代码 ...

  3. MVC学习系列——参考

    C#进阶系列——WebApi接口传参不再困惑:传参详解 http://www.cnblogs.com/landeanfen/p/5337072.html

  4. EXTJS 4.2 资料 将store 传到后台

    var lstAddRecord = new Array(); store.each(function (record) { lstAddRecord.push(record.data); }); E ...

  5. Hibernate从入门到精通(四)基本映射

    映射的概念 在上次的博文Hibernate从入门到精通(三)Hibernate配置文件我们已经讲解了一下Hibernate中的两种配置文件,其中提到了两种配置文件的主要区别就是XML可以配置映射.这里 ...

  6. EF当实体模型与数据库的架构不同时要删除数据库时的报错问题

    当使用的EF的时候,我们都知道EF当实体模型与数据库的架构不同时要删除数据库,这是会把错: 无法创建与 'master' 数据库之间的连接,这是因为已打开原始数据库连接,并且已从连接字符串中删除凭据. ...

  7. IIS (HTTP Error 500.21 - Internal Server Error)解决

    今天在测试网站的时候,在浏览器中输入http://localhost/时,发生如下错误: HTTP Error 500.21 - Internal Server Error Handler " ...

  8. C++中头文件相互包含与前置声明

    一.类嵌套的疑问 C++头文件重复包含实在是一个令人头痛的问题,前一段时间在做一个简单的数据结构演示程序的时候,不只一次的遇到这种问题.假设我们有两个类A和B,分别定义在各自的有文件A.h和B.h中, ...

  9. java后台SSH框架之Hibernate心得一

    双向关联和单向关联 双向关联:这两个表无论哪一个更新另外一个表都更新 单向关联:就是只有一个主表更新从表才更新 从表更新主表不管 双向关联配置 表1配置 <set name="对象名称 ...

  10. 如何安装Favicon

    如何安装Favicon favicon.ico图像放在根目录下(也可以是其他目录)在页面源文件的<head></head>标签之间插入 <link rel="s ...