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. laravel项目拉取下来安装,node.js库安装

    1.拉取项目 2.切换分支 圈圈里面是版本 composer 安装laravel组件其他库 安装node.js安装包  npm set registry=https://registry.npm.ta ...

  2. python开源项目及示例代码

    本页面是俺收集的各种 Python 资源,不定期更新. 下面列出的各种 Python 库/模块/工具,如果名称带超链接,说明是第三方的:否则是 Python 语言内置的. 1 算法 1.1 字符串处理 ...

  3. Spark Tungsten揭秘 Day1 jvm下的性能优化

    Spark Tungsten揭秘 Day1 jvm下的性能优化 今天开始谈下Tungsten,首先我们需要了解下其背后是符合了什么样的规律. jvm对分布式天生支持 整个Spark分布式系统是建立在分 ...

  4. [Python 标准库]第一章 文本

    Chapter01 文本 1.1 string - 文本常量和模板 作用:包含处理文本的常量和类. 1.1.1 函数 capwords(s):字符串中所有单词首字母大写 maketrans():创建转 ...

  5. Teradata基础教程中的数据库试验环境脚本

    Teradata基础教程中的数据库表: Customer:  客户信息表 Location:  位置信息表 Employee:  雇员信息表 Job:  工作信息表 Department:  部门表 ...

  6. [转载]iOS本地推送-备用

    第一步:创建本地推送// 创建一个本地推送UILocalNotification *notification = [[[UILocalNotification alloc] init] autorel ...

  7. Linux桌面扩展 Docky

    Docky是从GNOME Do项目剥离出来的一个Dock软件,最初即为GNOME Do的“Docky”模式. 后来开发者觉得,GNOME Do是个快速启动工具,弄个Docky模式有点不伦不类,于是,D ...

  8. jquery 数组和字典

    1 数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  9. Unity3D 自动打包整个项目(以AssetBundle实现)

    原地址:http://blog.csdn.net/huang7jiao/article/details/18370653 需求: 在移动开发中,手动控制资源的加载.释放和热更新,是很有必要的. 而Un ...

  10. stl map高效遍历删除的方法

    for(:iter!=mapStudent.end():) {      if((iter->second)>=aa)      {          //满足删除条件,删除当前结点,并指 ...