题目链接:

hdu: http://acm.hdu.edu.cn/showproblem.php?pid=5172

bc(中文):http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=567&pid=1003

题解:

线段树+前缀和

一个区间要满足1到n的一个排列,要同时满足两点,一是它的和是n*(n+1)/2,这个可以用前缀和直接求;二是它每个元素不能重复。

区间内每个元素都不能重复:

  记录第i个元素的左边一个离他最近的值与他相等的数的位置,记在arr[i]里面,对于区间[L,r]要满足区间里面最大的arr[i](L<=i<=r)要小于L;这个可以用线段树或rmq维护。

要先比较第一个条件,即和要先等于n*(n+1)/2,满足了再去查线段树,否则会超时。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lson (o<<1)
#define rson ((o<<1)+1)
#define M (l+(r-l)/2)
using namespace std;
typedef long long LL; const int maxn = 1e6 + ;
LL sumv[maxn << ];
int maxv[maxn << ];
int arr[maxn],vis[maxn];
int n, m; int max(int a, int b) { return a > b ? a : b; } void build(int o, int l, int r) {
if (l == r) {
maxv[o] = arr[l];
}
else {
build(lson, l, M);
build(rson, M + , r);
maxv[o] = max(maxv[lson], maxv[rson]);
}
} int ql, qr;
void query(int o, int l, int r,int &ma) {
if (ql <= l&&r <= qr) {
ma = max(ma, maxv[o]);
}
else {
if (ql <= M) query(lson, l, M,ma);
if (qr > M) query(rson, M + , r, ma);
}
} bool check(int l,int r) {
LL nn = r - l + ;
if (nn*(nn + ) / != sumv[r] - sumv[l - ]) return false;
int ma = -;
query(, , n,ma);
if (ma >= l) return false;
return true;
} void init() {
sumv[] = ;
memset(vis, , sizeof(vis));
} int main() {
while(scanf("%d%d", &n, &m) == && n) {
init();
for (int i = ; i <= n; i++) {
int x;
scanf("%d", &x);
sumv[i] = sumv[i - ] + x;
arr[i] = vis[x];
vis[x] = i;
}
build(,,n);
while (m--) {
scanf("%d%d", &ql, &qr);
LL len = qr - ql + ;
if (check(ql,qr)) {
puts("YES");
}
else {
puts("NO");
}
}
}
return ;
}

HDU 5172 GTY's gay friends 线段树+前缀和+全排列的更多相关文章

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

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

  2. 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 ...

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

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

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

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

  5. hdu 5172 GTY's gay friends

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

  6. GTY's gay friends 线段树判断区间是否有相同数字

    http://acm.hdu.edu.cn/showproblem.php?pid=5172 判断一个区间是否为全排列是: 1.区间总和 = (1 + R - L + 1) * (R - L + 1) ...

  7. HDU 3074.Multiply game-区间乘法-线段树(单点更新、区间查询),上推标记取模

    Multiply game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  8. hdu 5274 Dylans loves tree(LCA + 线段树)

    Dylans loves tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  9. HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)

    HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意:  给一个序列由 ...

随机推荐

  1. 【memcached的常用操作】

    memcache是一个KEY-VALUE存储缓存数据库,常用作网站数据请求的存储; 提供多种API: 语法简单类似于redis; #设置一个键值存储 #添加一个键值存储 #获取键值 #删除键值 #清空 ...

  2. 【JVM】TroubleShooting之内存溢出异常(OOM)与调优

    1. OOM概述 If your application's execution time becomes longer and longer, or if the operating system ...

  3. 【 C 】字符串常量

    当一个字符串常量出现在表达式中时,它的值是个指针常量.编译器把这些指定字符的一份拷贝存储在内存的某个位置,并存储一个指向第一个字符的指针.但是,当数组名用于表达式中时,它们的值也是个指针常量.我们可以 ...

  4. latex常用符号

    希腊字母 字母名称 大写 小写 大写latex 小写latex alpha A \(\alpha\) \alpha beta B \(\beta\) \beta gamma \(\Gamma\) \( ...

  5. C语言第三周

    一. 字符串常量 只要有一对双引号括起来的字符序列就是字符串常量.列如"hello"接"123" 注意:"a"是字符串常量'a'是字符常量. ...

  6. 20155322 《Java程序设计》课堂实践项目MyOD

    20155322 <Java程序设计>课堂实践项目MyOD 实践要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和 ...

  7. 20155331 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155331 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 使用JDK编译.运行简单的java程序 实验目的与要求: 使用JDK和IDE编译.运行简 ...

  8. # 20155337 2016-2017-2 《Java程序设计》第五周学习总

    20155337 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 •语法与继承架构 •使用try.catch •特点: 使用try.catch语法,J ...

  9. Hibernate 3.0 HelloWorld

    说明 基于Hibernate 3.0,Mysql5.0,java jdk 1.7,运行需要的lib 库,从http://files.cnblogs.com/HCCZX/Hibernate_Lib.ra ...

  10. Ceph学习之路(一)之ceph初识

    一.元数据和元数据管理 (1)元数据 在学习Ceph之前,需要了解元数据的概念.元数据又称为中介数据.中继数据,为描述数据的数据.主要描述数据属性的信息,用来支持如指示存储位置.历史数据.资源查找.文 ...