【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. elasticsearch对某段时间范围内按时间间隔进行统计

    { "query" : { "constant_score" : { "filter" : { "range" : { ...

  2. scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)

      python版本  python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www. ...

  3. Selenium自动化测试第二天(上)

    如有任何学习问题,可以添加作者微信:lockingfree 目录 Selenium自动化测试基础 Selenium自动化测试第一天(上) Selenium自动化测试第一天(下) Selenium自动化 ...

  4. Phaser3跟随自定义路径移动的赛车 -- iFIERO游戏教程

      racingcar 在线预览:http://www.ifiero.com/uploads/phaser/pathrotate/代码: var config = { type: Phaser.AUT ...

  5. winform圆角窗体实现

    winform圆角窗体实现 1.窗体的FormBorderStyle设置成None,不要控制边框 2.TransparencyKey和BackColor颜色设置成相同的,这样,窗体就透明了 3.以此为 ...

  6. springMVC 第一章

    springMVC 第一章 一.分层结构的项目 组成方式: 表示层:页面,Servlet 业务层:业务逻辑类(service) 持久层:与数据库交互的类(dao) 程序执行的过程:表示层->se ...

  7. MySQL Proxy和 Amoeba 工作机制浅析

    MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断.改变并转发客户端和后端数据库之间的通信来实现其功能,这和WinGate 之类的网络代理服务器的基本思想是一样的.代理服务器是和 ...

  8. 一个小时搭建一个全栈 Web 应用框架

    把想法变为现实的能力是空想家与实干家的区别.不管你是在一家跨国公司工作,还是正在为自己的创业公司而努力,那些有能力将创意转化为真正产品的人,都具有宝贵的技能并拥有明显的实力.如果你能在不到一个小时的时 ...

  9. 03慕课网《进击Node.js基础(一)》API-URL网址解析

    url url.parse(url,query,host);解析域名 url必须,地址字符串 query可选 host 可选:在不清楚协议时正确解析 querystring 字符串和对象之间互相解析 ...

  10. mininet实验 动态改变转发规则实验

    写在前面 本实验参考 POX脚本设置好控制器的转发策略,所以只要理解脚本. mininet脚本设置好拓扑和相关信息,所以也只要理解脚本. POX脚本目前基本看不懂. 本实验我学会了:POX控制器Web ...