题意

给定一个长度为n的数列,有m次询问,询问形如l r k

要你在区间[l,r]内选一个长度为k的区间,求区间最小数的最大值

Sol

二分答案

怎么判定,每种数字开一棵线段树

某个位置上的数大于等于它为1

那么就是求区间最大的1的序列长度大于k

二分的最优答案一定在这个区间内,否则不优

排序后就是用主席树优化空间

之前\(build\)一下,因为区间有长度不好赋值

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(1e5 + 5);
const int __(2e6 + 5); IL int Input(){
RG int x = 0, z = 1; RG char c = getchar();
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
} int n, m, tot, rt[_], a[_], id[_], ls[__], rs[__], o[_], len;
struct Data{
int maxl, maxr, maxn, len; IL void Init(){
maxl = maxr = maxn = len = 0;
}
} T[__], Ans; IL int Cmp(RG int x, RG int y){
return a[x] < a[y];
} IL Data Merge(RG Data A, RG Data B){
RG Data ret;
ret.maxl = A.maxl, ret.maxr = B.maxr, ret.len = A.len + B.len;
ret.maxn = max(A.maxr + B.maxl, max(A.maxn, B.maxn));
if(A.maxl == A.len) ret.maxl = A.len + B.maxl;
if(B.maxr == B.len) ret.maxr = B.len + A.maxr;
return ret;
} IL void Modify(RG int &x, RG int l, RG int r, RG int p){
ls[++tot] = ls[x], rs[tot] = rs[x], T[tot] = T[x], x = tot;
if(l == r){
T[x].maxl = T[x].maxr = T[x].maxn = 1;
return;
}
RG int mid = (l + r) >> 1;
if(p <= mid) Modify(ls[x], l, mid, p);
else Modify(rs[x], mid + 1, r, p);
T[x] = Merge(T[ls[x]], T[rs[x]]);
} IL void Query(RG int x, RG int l, RG int r, RG int L, RG int R){
if(L <= l && R >= r){
Ans = Merge(Ans, T[x]);
return;
}
RG int mid = (l + r) >> 1;
if(L <= mid) Query(ls[x], l, mid, L, R);
if(R > mid) Query(rs[x], mid + 1, r, L, R);
} IL void Build(RG int &x, RG int l, RG int r){
T[x = ++tot].len = r - l + 1;
if(l == r) return;
RG int mid = (l + r) >> 1;
Build(ls[x], l, mid), Build(rs[x], mid + 1, r);
} int main(RG int argc, RG char* argv[]){
n = Input();
for(RG int i = 1; i <= n; ++i) id[i] = i, o[i] = a[i] = Input();
sort(id + 1, id + n + 1, Cmp), sort(o + 1, o + n + 1);
len = unique(o + 1, o + n + 1) - o - 1;
Build(rt[len + 1], 1, n);
for(RG int i = len, j = n; i; --i){
rt[i] = rt[i + 1];
for(; j && a[id[j]] == o[i]; --j)
Modify(rt[i], 1, n, id[j]);
}
m = Input();
for(RG int i = 1; i <= m; ++i){
RG int l = Input(), r = Input(), k = Input();
RG int L = 1, R = len, ans = 0;
while(L <= R){
RG int mid = (L + R) >> 1;
Ans.Init();
Query(rt[mid], 1, n, l, r);
if(Ans.maxn >= k) ans = mid, L = mid + 1;
else R = mid - 1;
}
printf("%d\n", o[ans]);
}
return 0;
}

CF484E Sign on Fence的更多相关文章

  1. CF484E Sign on Fence && [国家集训队]middle

    CF484E Sign on Fence #include<bits/stdc++.h> #define RG register #define IL inline #define _ 1 ...

  2. 【CF484E】Sign on Fence(主席树)

    [CF484E]Sign on Fence(主席树) 题面 懒得贴CF了,你们自己都找得到 洛谷 题解 这不就是[TJOI&HEOI 排序]那题的套路吗... 二分一个答案,把大于答案的都变成 ...

  3. CF 484E - Sign on Fence

    E. Sign on Fence time limit per test 4 seconds memory limit per test 256 megabytes input standard in ...

  4. Codeforces Round #276 (Div. 1) E. Sign on Fence 二分+主席树

    E. Sign on Fence   Bizon the Champion has recently finished painting his wood fence. The fence consi ...

  5. Codeforces 484E Sign on Fence(是持久的段树+二分法)

    题目链接:Codeforces 484E Sign on Fence 题目大意:给定给一个序列,每一个位置有一个值,表示高度,如今有若干查询,每次查询l,r,w,表示在区间l,r中, 连续最长长度大于 ...

  6. CF&&CC百套计划4 Codeforces Round #276 (Div. 1) E. Sign on Fence

    http://codeforces.com/contest/484/problem/E 题意: 给出n个数,查询最大的在区间[l,r]内,长为w的子区间的最小值 第i棵线段树表示>=i的数 维护 ...

  7. AC日记——Sign on Fence Codeforces 484e

    E. Sign on Fence time limit per test 4 seconds memory limit per test 256 megabytes input standard in ...

  8. 「CF484E」Sign on Fence「整体二分」「线段树」

    题意 给定一个长度为\(n\)的正整数序列,第\(i\)个数为\(h_i\),\(m\)个询问,每次询问\((l, r, w)\),为\([l, r]\)所有长度为\(w\)的子区间最小值的最大值.( ...

  9. (困难) CF 484E Sign on Fence,整体二分+线段树

    Bizon the Champion has recently finished painting his wood fence. The fence consists of a sequence o ...

随机推荐

  1. shiro进行散列算法操作

    shiro最闪亮的四大特征:认证,权限,加密,会话管理 为了提高应用系统的安全性,这里主要关注shiro提供的密码服务模块: 1.加密工具类的熟悉 首先来个结构图,看看shiro提供了哪些加密工具类: ...

  2. 终极解决方案:java.security.cert.CertificateException: Certificates does not conform to algorithm constraints

    报错信息 javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Certificates does ...

  3. MysqL自动提交机制的关闭

    MysqL在执行一句数据库操作命令的时候,通常都是自动提交的.常用引擎下有两种,分别是MyIsam和InnoDB,MyIsam是不支持事务处理的,但InnoDB支持,但InnoDB在不开启事务处理的情 ...

  4. 软AP的实现------hostapd的编译运行

    最近要给摄像头做一个软ap,让手机能够连上这个热点,从而能够与摄像头进行通信. 1.什么是hostapd : hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能 ...

  5. hihoCoder 403 Forbidden 字典树

    题意:给定个规则,个ip,问这些ip是否能和某个规则匹配,如果有多个规则,则匹配第一个.如果没能匹配成功,则认为是"allow",否则根据规则决定是"allow" ...

  6. uva1343 IDA*

    这题需要用数组记录每个block的位置.启发函数:d+wa(8-当前最多相同个数)>maxd直接退出 AC代码: #include<cstdio> #include<cstri ...

  7. hdu3016 线段树+简单DP

    以每个方块左右坐标区间为节点建立字典树,每个节点保存这个区间对应的方块的下标,将方块按照高度排序. 如何得到第i个方块可以移动到的两个方块呢?将所有方块排完序,将前i-1个方块放入字典树,根据第i个方 ...

  8. spring oauth2 ,spring security整合oauth2.0 JdbcTokenStore实现 解决url-pattern .do .action

    参考以下两个文章: http://www.cnblogs.com/0201zcr/p/5328847.html http://wwwcomy.iteye.com/blog/2230265 web.xm ...

  9. Storm+HBase实时实践

    1.HBase Increment计数器 hbase counter的原理: read+count+write,正好完成,就是讲key的value读出,若存在,则完成累加,再写入,若不存在,则按&qu ...

  10. 借助TZImagePickerController三方库理解自定义相册

    借助TZImagePickerController三方库理解自定义相册 1.整体架构分析 整体框架大致可以分为几个部分 <1>工具类-TZImageManager:这个类主要是工作是提供一 ...