FZU1862(线段树 或者 DP)
Problem 1862 QueryProblem Accept: 100 Submit: 249
Time Limit: 2000 mSec Memory Limit : 32768 KB
Problem Description
are N numbers (non-negative integers) in a circle. Now your task is
quite simple, just tell me the largest number between L and R.
The Figure 1 is a sample of five integers in a circle. (marked with their index, but not their exact value.)
Figure 1.The Figure 2,3 show how we count the number.

Figure 2.

Figure 3.
Input
There are no more than 10 test cases;
For each case, the first line contains only one integer N, indicates the size of the circle.
The following one line contains N non-negative integers where Mi
indicates the i-th integers whose index is i. (1 <= N <= 1000, 1
<= i <= N, 0 <= Mi <= 10^9)
Then one line contains Q indicates the number of querys. (1 <= Q <= 10^5)
Then the next Q lines, each line contains only two integers indicate L and R (1 <= L,R <= N)
Output
For each case, please output “Case #index:” in a single line, here index is the case index starts from one.
For each query just output a single line indicates the largest number between L and R.
Output a blank line after each case.
Sample Input
3 8
3
1 1
1 2
2 1
1
9
1
1 1
Sample Output
3
8
8
Case #2:
9
Hint
Huge Input, please “scanf” to avoid time limit exceed.
题意:在给定的区间中查询最大的数。当L>R时,R =R +n 来改变R这也是2*n的原因;
方法1:线段树
收获:函数中的num指的是线段树上的编号,而当le == ri时,le 或 ri指的是最低层的编号。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
using namespace std; const int INF=0x3f3f3f3f;
const double eps=1e-;
const double PI=acos(-1.0);
#define maxn 8006
int tre[maxn];
int a[maxn/];
int n;
void build(int num, int le, int ri)
{
if(le == ri)
{
if(le > n)
tre[num] = a[le-n];//函数中的num指的是线段树上的编号,而当le == ri时,le 或 ri指的是最低层的编号。
else
tre[num] = a[le];
return;
}
int mid = (le + ri)/;
build(num*, le, mid);
build(num*+, mid+, ri);
tre[num] = max(tre[num*], tre[num*+]);
}
int query(int num,int le,int ri,int x,int y)
{
if(x<=le&&y>=ri)
return tre[num];
int mid=(le+ri)/;
int ans=;
if(x<=mid)
ans=max(ans,query(num*,le,mid,x,y)); //先查询左边
if(y>mid)
ans=max(ans,query(num*+,mid+,ri,x,y)); //再查询右边
return ans;
}
int main()
{
int cas = ;
while(~scanf("%d", &n))
{
for(int i = ; i <= n; i++)
scanf("%d", &a[i]);
build(, , *n);
int m;
scanf("%d", &m);
int a, b;
printf("Case #%d:\n", cas++);
for(int j = ; j < m; j++)
{
scanf("%d%d", &a, &b);
if(b < a)
b = b + n;
printf("%d\n", query(, , *n, a, b));
}
puts("");
}
}
方法2:DP
收获:对dp有了更多的了解。
dp[i][j]指的是i到j这个区间内保存的最大值。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
#define C 0.57721566490153286060651209
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 using namespace std; typedef long long LL;
const int INF=0x3f3f3f3f;
const double eps=1e-;
const double PI=acos(-1.0); const int maxn=;
int dp[][];
int a[];
int main()
{
int n, b;
int sum=;
while(~scanf("%d", &n))
{
for(int i = ; i <= n; i++)
{
scanf("%d", &b);
a[i]=a[i+n]=b;
}
for(int i = ; i <=*n; i++)
{
dp[i][i]=a[i];
for(int j=i+;j<=*n;j++)
{
if(a[j]>dp[i][j-])
dp[i][j]=a[j];
else
dp[i][j]=dp[i][j-];
}
}
int m;
scanf("%d", &m);
int L, R;
printf("Case #%d:\n",++sum);
for(int i=;i<=m;i++)
{
int q,w;
scanf("%d%d",&q,&w);
if(w<q)
w=w+n;
printf("%d\n",dp[q][w]);
}
puts("");
}
return ;
}
FZU1862(线段树 或者 DP)的更多相关文章
- Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...
- 2018.09.12 poj2376Cleaning Shifts(线段树+简单dp)
传送门 貌似贪心能过啊%%%. 本蒟蒻写的线段树优化dp. 式子很好推啊. f[i]表示覆盖1~i所需的最小代价. 那么显然对于一个区间[li,ri]" role="present ...
- 2018.07.08 hdu4521 小明系列问题——小明序列(线段树+简单dp)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Proble ...
- CF833B The Bakery 线段树,DP
CF833B The Bakery LG传送门 线段树优化DP. 其实这是很久以前就应该做了的一道题,由于颓废一直咕在那里,其实还是挺不错的一道题. 先考虑\(O(n^2k)\)做法:设\(f[i][ ...
- Codeforces Round #426 (Div. 2) D 线段树优化dp
D. The Bakery time limit per test 2.5 seconds memory limit per test 256 megabytes input standard inp ...
- codeforces Good bye 2016 E 线段树维护dp区间合并
codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...
- BZOJ2090: [Poi2010]Monotonicity 2【线段树优化DP】
BZOJ2090: [Poi2010]Monotonicity 2[线段树优化DP] Description 给出N个正整数a[1..N],再给出K个关系符号(>.<或=)s[1..k]. ...
- Codeforces 834D The Bakery 【线段树优化DP】*
Codeforces 834D The Bakery LINK 题目大意是给你一个长度为n的序列分成k段,每一段的贡献是这一段中不同的数的个数,求最大贡献 是第一次做线段树维护DP值的题 感觉还可以, ...
- [AGC011F] Train Service Planning [线段树优化dp+思维]
思路 模意义 这题真tm有意思 我上下楼梯了半天做出来的qwq 首先,考虑到每K分钟有一辆车,那么可以把所有的操作都放到模$K$意义下进行 这时,我们只需要考虑两边的两辆车就好了. 定义一些称呼: 上 ...
随机推荐
- 需要考虑的9个SEO实践
搜索引擎优化重要吗?我们知道,网站设计是把屏幕上平淡无奇变成令人愉快的美感,更直观地辨认信息.这也是人与人之间在沟通想法,这样的方式一直在演变. 穴居人拥有洞穴壁画,古埃及人有象形文字,现代人有网页设 ...
- Unity5 游戏小实例(方块男去打架吧)
开发了将近半个月,最近进入一家游戏公司下班时间都是9点钟. 回到家里哪里还有时间去搞其他小东西, =.=这个小实例一直拖得太长了,先上一个版本.以后在慢慢修改. 项目下载地址: http://yu ...
- Runtime运行时机制
Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的 我们需要了解的是 Objective-C 是一门动态语言, ...
- maven 工作原理和添加jar包技巧
相 信只要做过 Java 开发的童鞋们,对 Ant 想必都不陌生,我们往往使用 Ant 来构建项目,尤其是涉及到特别繁杂的工作量,一个 build.xml 能够完成编译.测试.打包.部署等很多 ...
- mycat实例(2)
全局序列号 数据切分后,原有的关系数据库中的主键约束在分布式条件下将无法使用,因此需要引入外部机制保证数据唯一性标识,这种保证全局性的数据唯一标识的机制就是全局序列号(sequence). 1. 本地 ...
- 关于C#基类和子类函数调用问题
c#基类子类的函数调用关系,代码说明newkeyword后面的类中的函数为对象调用的函数,当然必需要有virtual和override,继承就相当于包括了基类的函数,子类对象调用时基类的函数相当于就在 ...
- [Hapi.js] View engines
View engines, or template engines, allow you to maintain a clean separation between your presentatio ...
- Hacker(12)----个人计算机安全防护策略
了解了黑客的常用入侵方法,针对这些方法分别指定对应的防护策略不太现实,因此用户只能掌握个人计算机安全的常见防护策略,以确保计算机处在一个相对安全的环境中.常见个人计算机防护策略有:安装并及时升级杀毒软 ...
- css-文本及其他
<!DOCTYPE html>css7-文本和其他 text-align行内元素对齐方式,值为 左/中/右 对齐:left/right/center.test{text-align:cen ...
- Oracle 回忆录
简述 工作时间说短也不算短了,掐指一算差不多三年了吧.以前都没有写过Blog,仅偶尔对所学和所用到的做些许整理,后面竟然没有把那留下来,悲催啊!留不下来的整理不是好东西(*^__^*) 嘻嘻……,现在 ...