qduoj 21waterproblem 线段树的简单应用
来源:互联网 发布:pmp认证 知乎 编辑:程序博客网 时间:2024/05/22 10:52
water problem
发布时间: 2015年10月10日 15:34 时间限制: 1000ms 内存限制: 256M
题意很简单
给你N个数, Q个查询
每次查询给你一个区间[L, R]
你要找出 [L, R] 这个区间里面取模M后的最大值。
第一行一个T,表示测试数据组数。 第二行两个整数N, M (1<=N<=10^5, 1<=M<=10^9)。 第三行给你N个整数 整数范围在1到10^9之间。 第四行给你一个整数Q. ( 1<=Q<=10^5) 下面Q行, 每一行对应两个整数L, R (1<=L<=R<10^9)
每一行对应一个询问的答案。
15 34 2 2 3 521 3 4 5
22
ac代码:
#include<stdio.h>
#define MAXN 1000100
int t[MAXN],num[MAXN];
void build(int L,int R,int d)
{ if(L==R)
{ t[d]=num[L];
return ;
}
else
{ int mid=(L+R)/2;
build(L,mid,d*2);
build(mid+1,R,2*d+1);
}
t[d]=t[2*d]>t[2*d+1]?t[2*d]:t[2*d+1];
}
int check(int L,int R,int l,int r,int d)
{ if(L==l&&R==r)
return t[d];
else
{ int mid=(L+R)/2;
if(r<=mid)
return check(L,mid,l,r,d*2);
else if(l>mid)
return check(mid+1,R,l,r,2*d+1);
else
return check(L,mid,l,mid,2*d)>check(mid+1,R,mid+1,r,2*d+1)? check(L,mid,l,mid,2*d):check(mid+1,R,mid+1,r,2*d+1);
}
}
int main()
{ int T,i,N,M,l,r,X,q;
scanf("%d",&T);
while(T--)
{ scanf("%d %d",&N,&M);
for(i=1;i<=N;i++)
{ scanf("%d",&X);
num[i]=X%M;
}
build(1,N,1);
scanf("%d",&q);
for(i=0;i<q;i++)
{ scanf("%d %d",&l,&r);
int sum=check(1,N,l,r,1);
printf("%d\n",sum);
}
}
return 0;
}
欢迎大家指出我的错误,我一定会更加努力的!
- qduoj 21waterproblem 线段树的简单应用
- qduoj water problem(线段树)
- 线段树的简单应用
- QDUOJ 39 - 签到题(线段树)
- qduoj 一道非常简单的签到题
- qduoj water problem(线段树区间查询)
- Just a Hook(HDU1698 线段树的简单应用)
- hdu1166 敌兵布-线段树的简单应用-查询更改
- 线段树的应用
- 线段树的应用
- 简单的线段树
- 线段树的简单应用;火车订票;线段树用起来太灵活了!;
- qduoj 96 一道非常简单的签到题
- qduoj 88 一道非常简单的炉石题(最大匹配)
- qduoj 102 一道非常简单的数学题(构造)
- qduoj ycb老师与一道简单的物理题 三分
- qduoj 一道简单的数据结构题(水题)
- QDUOJ 蒸鱼的一个简单签到题 思维+kmp
- 完美世界编程题2
- bat批处理循环执行adb命令
- 如何让未知宽高的图片在已知宽高的父元素中垂直居中?
- Android Studio版本控制之Git篇(服务器gitblit)
- jquery源码解读笔记(1.11.3)
- qduoj 21waterproblem 线段树的简单应用
- 进行JUnit单元测试时,报找不到test-dao.xml等配置文件的错误
- HDU 1575 矩阵快速幂裸题
- 第一个自己的app ----- TasteNews
- PAT乙级别.1035. 插入与归并(25)
- 设计模式之适配器(Adapter)模式
- BZOJ1233【usaco open 2009】干草堆 tower
- EM算法及其扩展
- arrays.sort用法arrays.fill用法arrays.equals用法