HDU4638:Group(线段树离线处理)
of an interval is sum of these value of groups. The people of same group's id must be continuous. Now we chose an interval of men and want to know there should be how many groups so the value of interval is max.
For each case first line is n, m(1<=n ,m<=100000) indicate there are n men and m query.
Then a line have n number indicate the ID of men from left to right.
Next m line each line has two number L,R(1<=L<=R<=n),mean we want to know the answer of [L,R].
1
5 2
3 1 2 5 4
1 5
2 4
1
2题意:给出一个数组。每次查询l,r。看区间内能分成几个连续的数列思路:离线处理全部查询#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <bitset>
#include <algorithm>
#include <climits>
using namespace std; #define ls 2*i
#define rs 2*i+1
#define UP(i,x,y) for(i=x;i<=y;i++)
#define DOWN(i,x,y) for(i=x;i>=y;i--)
#define MEM(a,x) memset(a,x,sizeof(a))
#define W(a) while(a)
#define gcd(a,b) __gcd(a,b)
#define LL long long
#define N 100005
#define MOD 1000000007
#define INF 0x3f3f3f3f
#define EXP 1e-8
#define rank rank1
const int mod = 10007; struct node
{
int l,r,val;
} a[N*4],s[N]; int num[N],pos[N],vis[N],ans[N];
int n,m; int cmp(node a,node b)
{
return a.r<b.r;
} void build(int l,int r,int i)
{
a[i].l = l;
a[i].r = r;
a[i].val = 0;
if(l==r) return;
int mid = (l+r)/2;
build(l,mid,ls);
build(mid+1,r,rs);
} void updata(int i,int pos,int v)
{
a[i].val+=v;
if(a[i].l==a[i].r) return;
int mid = (a[i].l+a[i].r)/2;
if(pos<=mid) updata(ls,pos,v);
else updata(rs,pos,v);
} int query(int l,int r,int i)
{
if(a[i].l==l&&a[i].r==r)
{
return a[i].val;
}
int mid = (a[i].l+a[i].r)/2;
if(r<=mid) return query(l,r,ls);
if(l>mid) return query(l,r,rs);
return query(l,mid,ls)+query(mid+1,r,rs);
} int main()
{
int t,i,j,k,cnt;
scanf("%d",&t);
while(t--)
{
MEM(vis,0);
scanf("%d%d",&n,&m);
for(i = 1; i<=n; i++)
{
scanf("%d",&num[i]);
pos[num[i]] = i;
}
for(i = 1; i<=m; i++)
{
scanf("%d%d",&s[i].l,&s[i].r);
s[i].val = i;
}
sort(s+1,s+1+m,cmp);
build(1,n,1);
cnt = 1;
for(i = 1; i<=n&&cnt<=m; i++)
{
updata(1,i,1);
vis[num[i]]=1;
if(vis[num[i]-1]) updata(1,pos[num[i]-1],-1);
if(vis[num[i]+1]) updata(1,pos[num[i]+1],-1);
while(s[cnt].r==i&&cnt<=m)
{
ans[s[cnt].val] = query(s[cnt].l,s[cnt].r,1);
cnt++;
}
}
for(i = 1; i<=m; i++)
printf("%d\n",ans[i]);
} return 0;
}
HDU4638:Group(线段树离线处理)的更多相关文章
- 线段树+离线 hdu5654 xiaoxin and his watermelon candy
传送门:点击打开链接 题意:一个三元组假设满足j=i+1,k=j+1,ai<=aj<=ak,那么就好的.如今告诉你序列.然后Q次询问.每次询问一个区间[l,r],问区间里有多少个三元组满足 ...
- 牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)
前言 听说是线段树离线查询?? 做题做着做着慢慢对离线操作有点感觉了,不过也还没参透,等再做些题目再来讨论离线.在线操作. 这题赛后看代码发现有人用的树状数组,$tql$.当然能用树状数组写的线段树也 ...
- HDU 4638-Group(线段树+离线处理)
题意: 给n个编号,m个查询每个查询l,r,求下标区间[l,r]中能分成标号连续的组数(一组内的标号是连续的) 分析: 我们认为初始,每个标号为一个组(线段树维护区间组数),从左向右扫序列,当前标号, ...
- HDU 4630-No Pain No Game(线段树+离线处理)
题意: 给你n个数的序列a,q个询问,每个询问给l,r,求在下标i在[l,r]的区间任意两个数的最大公约数中的最大值 分析: 有了hdu3333经验,我们从左向右扫序列,如果当前数的约数在前面出现过, ...
- HDU 4288 Coder 【线段树+离线处理+离散化】
题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ...
- SPOJ--K-query (线段树离线) 离线操作解决一些问题
K-query Given a sequence of n numbers a1, a2, ..., an and a number of k- queries. A k-query is a tri ...
- lca 欧拉序+rmq(st) 欧拉序+rmq(线段树) 离线dfs 倍增
https://www.luogu.org/problemnew/show/P3379 1.欧拉序+rmq(st) /* 在这里,对于一个数,选择最左边的 选择任意一个都可以,[left_index, ...
- 51nod 1463 找朋友(线段树+离线处理)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1463 题意: 思路: 好题! 先对所有查询进行离线处理,按照右区间排序, ...
- 玲珑oj 1117 线段树+离线+离散化,laz大法
1117 - RE:从零开始的异世界生活 Time Limit:1s Memory Limit:256MByte Submissions:438Solved:68 DESCRIPTION 486到了异 ...
随机推荐
- drawable的文件名大写
drawable的文件名大写导致的R文件消失!!!1
- ACM_“IP地址”普及(进制转换)
“IP地址”普及 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大家都知道最近广财大校园网提速,现在就跟大家普及一下简单的互联网 ...
- [ CTSC 2007 / BZOJ 2151 ] Backup / 种树
\(\\\) \(Description\) 给出一个数轴上\(N\)个点的坐标\(A_i\),选择\(K\)个点对,使得这\(K\)个点对每个点对的距离之和尽可能小. \(N\in [0,10^5] ...
- 实现div毛玻璃背景
毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景的方法 CSS3 Filter CSS3的Filter主要用在图像的特效处理上,默认值为none,还有以下备选项: 1. ...
- [转]深入理解/proc目录
Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...
- [Windows Server 2008] Apache+PHP安全设置
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:Win2008 ...
- python调用java API
JPype documentation JPype is an effort to allow python programs full access to java class libraries. ...
- js 零碎
function具有一个属性是length,表示希望接收到的命名参数的个数.可以通过arguments获取参数.arguments.callee表示函数本身,递归时有用,也可以通过arguments. ...
- HDU_1085_Holding Bin-Laden Captive!_母函数
Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- Android—修改button属性
一般安卓里的普通按钮控件灰灰的,比较单调,我们可以给按钮加上背景图片,或者自定义按钮的圆角,颜色等属性. 下面用代码举例: <Button android:id="@+id/reset ...