超内存了,呃。。。不知道如何优化了。

首先要判断区间的和是否和1~n的和相等。

再个,记录下每个数字前一次出现的位置,求这些位置的最大值,如果小于左端点,则表示有这样的一个序列。

呃~~~第二个条件当时曾有想过,但认为要在O(1)时间内得出不可能,后来才知道,还有ST算法啊。。。。不让熟练啊。。。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define LL __int64 using namespace std;
const int MAX=1000002;
int num[MAX],pre[MAX];
double sum[MAX];
int dp[MAX][21]; void ST(int n){
int i, j, k, m;
k = (int) (log((double)n) / log(2.0));
for(i = 1; i <= n; i++) {
dp[i][0] = num[i];
}
for(j = 1; j <= k; j++) {
for(i = 1; i + (1 << j) - 1 <= n; i++) {
m = i + (1 << (j - 1));
dp[i][j] = max(dp[i][j-1], dp[m][j-1]);
}
}
}
int rmq(int i, int j) {
int k = (int)(log(double(j-i+1)) / log(2.0)), t1;
t1 =max(dp[i][k], dp[j - (1<<k) + 1][k]);
return t1;
} int main(){
int n,m,tmp,l,r,i; double tsum;
while(scanf("%d%d",&n,&m)!=EOF){
sum[0]=0;
memset(pre,0,sizeof(pre));
for(i=1;i<=n;i++){
scanf("%d",&tmp);
sum[i]=sum[i-1]+tmp;
num[i]=pre[tmp];
pre[tmp]=i;
}
ST(n);
while(m--){
scanf("%d%d",&l,&r);
tsum=(r-l+2)*(r-l+1)*1.0/2.0;
if(tsum!=sum[r]-sum[l-1]){
puts("NO");
continue;
}
if(rmq(l,r)<l){
puts("YES");
}
else puts("NO");
}
}
return 0;
}

  

HDU 5172的更多相关文章

  1. HDU 5172 GTY's gay friends 线段树+前缀和+全排列

    题目链接: hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172 bc(中文):http://bestcoder.hdu.edu.cn/contest ...

  2. HDU 5172 GTY's gay friends (线段树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5172 题意: 给你一个n个数的数组,m次询问,询问在[L, R] 这个区间里面有没有 [1, R-L+ ...

  3. BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]

    传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  4. hdu 5172 GTY's gay friends

    GTY's gay friends 题意:给n个数和m次查询:(1<n,m<1000,000);之后输入n个数值(1 <= ai <= n):问下面m次查询[L,R]中是否存在 ...

  5. HDU 5172 GTY's gay friends 线段树

    GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  6. GTY's gay friends HDU - 5172 线段树

    GTY has nn gay friends. To manage them conveniently, every morning he ordered all his gay friends to ...

  7. hdu 5172(线段树||HASH)

    GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  8. hdu 5172 GTY's gay friends(线段树最值)

    题意: GTY有n个朋友,站成一排,每个人有一个特征值ai. 有m个询问.每次询问给两个数L,R.问你[L,R](即aL...aR)是否是1..(R-L+1)的一个全排列. 是输出YES,否则输出NO ...

  9. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

随机推荐

  1. Visual C++ RunTime的特征——非烫即屯

    Visual C++ RunTime的特征——非烫即屯 大一刚学C语言,第二次上机课,当我发现我照着书抄写的程序在运行之外的黑框里面跳出一排“烫烫烫烫烫”,当时就震惊了.你们能想象一个来自小城,在大学 ...

  2. HDU1561 The more, The Better

    HDU1561 The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  3. lightoj--1005--Rooks(组合数)

    Rooks Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Submit Status De ...

  4. 自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}

    一.结构体类型 结构体类型,共用体类型,枚举类型,类类型等统称为自定义类型(user-defined-type,UDT). 结构体相当于其他高级语言中的记录(record);例如: struct St ...

  5. javascript必须知道的知识要点(一)

    该文章不详细叙述各知识要点的具体内容,仅把要点列出来,供大家学习的时候参照,或者检测自己是否熟练掌握了javascript,清楚各个部分的内容. 语句 注释 输出 字面量 变量 数据类型 typeof ...

  6. 在ubuntu中安装Markdown神器Typora

    title: 在ubuntu中安装Markdown神器Typora toc: false date: 2018-09-01 17:48:15 categories: methods tags: ubu ...

  7. anaconda 使用 及 tensorflow-gpu 安装

    Anaconda简易使用 创建新环境 conda create -n rcnn python=3.6 删除环境 conda remove -n rcnn --all 进入环境 conda activa ...

  8. linux编译安装protobuf2.5.0

    1.下载安装包 https://github.com/google/protobuf/releases?after=v3.0.0-alpha-4.1 找到相应的版本下载 2.解压安装包 #.tar.g ...

  9. C - Valera and Fruits

    Problem description Valera loves his garden, where n fruit trees grow. This year he will enjoy a gre ...

  10. Web启动,停止Windows服务

    When you grow stronger,the world become more dangerous.当你变得越强大,这个世界反而会变得越危险. ServiceModel.cs代码: publ ...