【CF484E】Sign on Fence(主席树)

题面

懒得贴CF了,你们自己都找得到

洛谷

题解

这不就是[TJOI&HEOI 排序]那题的套路吗。。。

二分一个答案,把大于答案的都变成\(1\),其余变成\(0\)

按照题目要求的区间内连续的\(K\)个

就是检查最长的连续\(1\)的子段长度大于\(K\)

所以维护\(1\)的子段长度(这也是原题吧??)

因为范围比较大,不能每次开线段树计算

我们发现每次将范围增大的时候,在线段树上可以直接做一定的修改

又因为要维护所有的线段树,所以直接主席树维护即可

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 111111
inline int read()
{
RG int x=0,t=1;RG char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return x*t;
}
struct Node
{
int ls,rs,l,r,id;
int lm,rm,mm;
}t[MAX*20];
int tot,rt[MAX];
Node operator+(Node a,Node b)
{
Node c;c.ls=a.id;c.rs=b.id;
c.l=a.l;c.r=b.r;c.lm=a.lm;c.rm=b.rm;
if(a.lm==a.r-a.l+1)c.lm+=b.lm;
if(b.lm==b.r-b.l+1)c.rm+=a.rm;
c.mm=max(max(a.mm,b.mm),a.rm+b.lm);
return c;
}
void Modify(int &x,int ff,int l,int r,int p)
{
t[x=++tot]=t[ff];t[x].l=l;t[x].r=r;t[x].id=x;
if(l==r){t[x].lm=t[x].rm=t[x].mm=1;return;}
int mid=(l+r)>>1;
if(p<=mid)Modify(t[x].ls,t[ff].ls,l,mid,p);
else Modify(t[x].rs,t[ff].rs,mid+1,r,p);
t[x]=t[t[x].ls]+t[t[x].rs];t[x].id=x;
}
Node Query(int x,int l,int r,int L,int R)
{
if(l==L&&r==R)return t[x];
int mid=(l+r)>>1;
if(R<=mid)return Query(t[x].ls,l,mid,L,R);
if(L>mid)return Query(t[x].rs,mid+1,r,L,R);
return Query(t[x].ls,l,mid,L,mid)+Query(t[x].rs,mid+1,r,mid+1,R);
}
int n,a[MAX],S[MAX],p[MAX];
bool cmp(int x,int y){return a[x]<a[y];}
int main()
{
n=read();
for(int i=1;i<=n;++i)S[i]=a[i]=read(),p[i]=i;
sort(&S[1],&S[n+1]);
int sum=unique(&S[1],&S[n+1])-S-1;
for(int i=1;i<=n;++i)a[i]=lower_bound(&S[1],&S[sum+1],a[i])-S;
sort(&p[1],&p[n+1],cmp);
for(int i=n;i;--i)
{
if(a[p[i]]!=a[p[i+1]])Modify(rt[a[p[i]]],rt[a[p[i+1]]],1,n,p[i]);
else Modify(rt[a[p[i]]],rt[a[p[i]]],1,n,p[i]);
}
int Q=read();
while(Q--)
{
int L=read(),R=read(),K=read();
int l=1,r=sum,ans=1;
while(l<=r)
{
int mid=(l+r)>>1;
if(Query(rt[mid],1,n,L,R).mm>=K)ans=mid,l=mid+1;
else r=mid-1;
}
printf("%d\n",S[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

    题意 给定一个长度为n的数列,有m次询问,询问形如l r k 要你在区间[l,r]内选一个长度为k的区间,求区间最小数的最大值 Sol 二分答案 怎么判定,每种数字开一棵线段树 某个位置上的数大于等于 ...

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

  4. Codeforces Round #276 (Div. 1) E. Sign on Fence (二分答案 主席树 区间合并)

    链接:http://codeforces.com/contest/484/problem/E 题意: 给你n个数的,每个数代表高度: 再给出m个询问,每次询问[l,r]区间内连续w个数的最大的最小值: ...

  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. [bzoj3932][CQOI2015][任务查询系统] (主席树)

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

  9. CF 484E - Sign on Fence

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

随机推荐

  1. Python数据分析开发环境

    准备工作 下载并安装最新版本的Anaconda 下载并安装最新版本的Visual Studio Code 编辑器 Tips: 可以选择自己喜欢并且熟悉的编辑器或IDE.如:VIM.Emacs.Note ...

  2. grep 文件内容搜索

    比如现在我们要查找在/home/userlan/目录中哪些文件中包含foobar这个关键字 1. 打开终端2. 输入命令 grep -rl "foobar" /home/userl ...

  3. youtube高清视频下载方法

    youtube下载方法有多种, 但都不支持1080P以上的高清下载, 今天找到一种支持1080P的, 记录一下 步骤1: 百度搜: Dooseen tubedown 下载该软件, 并安装, 一直下一步 ...

  4. Unity Lighting - Reflections 反射(六)

      Reflections 反射 Reflection Source 反射源 By default, objects in a scene are rendered using Unity’s ‘St ...

  5. dubbo 微服务框架

    dubbo 注解配置: @Service //Service注解暴露服务 @Configuration // javaconfig形式配置公共模块 @DubboComponentScan // 指定d ...

  6. win2003系统网络安装——基于linux+pxe+dhcp+tftp+samba+ris

    原文发表于:2010-09-16 转载至cu于:2012-07-21 一.原理简介 PXE(preboot execute environment)工作于Client/Server的网络模式,支持工作 ...

  7. CS231n assignment2

    preparation: solve the problem of `from builtins import rang` pip install future  update_rule

  8. Buy the Ticket HDU 1133 卡特兰数应用+Java大数

    Problem Description The "Harry Potter and the Goblet of Fire" will be on show in the next ...

  9. flask验证登录学习过程(1)---准备

    对应flask的接口开发,目前自己可以熟练的进行.但是深入到更基础的,从注册到验证登录的过程一直不是特别清楚. 趁着年度不是特别忙的时候,特意去学习加强一下.把这个过程记录在此处. 首先是规划一个项目 ...

  10. 2018软工实践—Alpha冲刺(6)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 测试服务器并行能力 学习MSI.CUDA ...