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的数
维护最长连续子区间
把数从大到小插入主席树
对于每个询问,二分x
在第x棵线段树中查,若最长连续子区间>=w,到代表更大的线段树中查
没有建第n+1棵线段树,导致前面节点的siz不对,WA了一次
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 100001 pair<int,int>a[N]; int tot;
int root[N+],lc[N*],rc[N*]; struct node
{
int siz;
int mx,lmax,rmax; node operator + (node p)
{
node c;
c.siz=siz+p.siz;
c.lmax=lmax;
if(lmax==siz) c.lmax+=p.lmax;
c.rmax=p.rmax;
if(p.rmax==p.siz) c.rmax+=rmax;
c.mx=max(mx,p.mx);
c.mx=max(c.mx,rmax+p.lmax);
return c;
} }e[N*]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void build(int &k,int l,int r)
{
e[k=++tot].siz=r-l+;;
if(l==r) return;
int mid=l+r>>;
build(lc[k],l,mid);
build(rc[k],mid+,r);
} void insert(int pre,int &k,int l,int r,int pos)
{
k=++tot;
if(l==r)
{
e[k].siz=;
e[k].mx=e[k].lmax=e[k].rmax=;
return;
}
int mid=l+r>>;
if(pos<=mid)
{
rc[k]=rc[pre];
insert(lc[pre],lc[k],l,mid,pos);
}
else
{
lc[k]=lc[pre];
insert(rc[pre],rc[k],mid+,r,pos);
}
e[k]=e[lc[k]]+e[rc[k]];
} node query(int k,int l,int r,int opl,int opr)
{
if(l>=opl && r<=opr) return e[k];
int mid=l+r>>;
if(opr<=mid) return query(lc[k],l,mid,opl,opr);
if(opl>mid) return query(rc[k],mid+,r,opl,opr);
return query(lc[k],l,mid,opl,opr)+query(rc[k],mid+,r,opl,opr);
} int main()
{
//freopen("data.in","r",stdin);
//freopen("my.out","w",stdout);
int n;
read(n);
for(int i=;i<=n;++i)
{
read(a[i].first);
a[i].second=i;
}
sort(a+,a+n+);
build(root[n+],,n);
for(int i=n;i;--i) insert(root[i+],root[i],,n,a[i].second);
int m;
read(m);
int s,t,w;
int l,r,mid;
int ans;
while(m--)
{
read(s); read(t); read(w);
l=,r=n; ans=;
while(l<=r)
{
mid=l+r>>;
if(query(root[mid],,n,s,t).mx>=w) ans=mid,l=mid+;
else r=mid-;
}
cout<<a[ans].first<<'\n';
}
}
4 seconds
256 megabytes
standard input
standard output
Bizon the Champion has recently finished painting his wood fence. The fence consists of a sequence of n panels of 1 meter width and of arbitrary height. The i-th panel's height is hi meters. The adjacent planks follow without a gap between them.
After Bizon painted the fence he decided to put a "for sale" sign on it. The sign will be drawn on a rectangular piece of paper and placed on the fence so that the sides of the sign are parallel to the fence panels and are also aligned with the edges of some panels. Bizon the Champion introduced the following constraints for the sign position:
- The width of the sign should be exactly w meters.
- The sign must fit into the segment of the fence from the l-th to the r-th panels, inclusive (also, it can't exceed the fence's bound in vertical direction).
The sign will be really pretty, So Bizon the Champion wants the sign's height to be as large as possible.
You are given the description of the fence and several queries for placing sign. For each query print the maximum possible height of the sign that can be placed on the corresponding segment of the fence with the given fixed width of the sign.
The first line of the input contains integer n — the number of panels in the fence (1 ≤ n ≤ 105).
The second line contains n space-separated integers hi, — the heights of the panels (1 ≤ hi ≤ 109).
The third line contains an integer m — the number of the queries (1 ≤ m ≤ 105).
The next m lines contain the descriptions of the queries, each query is represented by three integers l, r and w (1 ≤ l ≤ r ≤ n,1 ≤ w ≤ r - l + 1) — the segment of the fence and the width of the sign respectively.
For each query print the answer on a separate line — the maximum height of the sign that can be put in the corresponding segment of the fence with all the conditions being satisfied.
5
1 2 2 3 3
3
2 5 3
2 5 2
1 5 5
2
3
1
The fence described in the sample looks as follows:

The possible positions for the signs for all queries are given below.
The optimal position of the sign for the first query.
The optimal position of the sign for the second query.
The optimal position of the sign for the third query.
CF&&CC百套计划4 Codeforces Round #276 (Div. 1) E. Sign on Fence的更多相关文章
- CF&&CC百套计划4 Codeforces Round #276 (Div. 1) A. Bits
http://codeforces.com/contest/484/problem/A 题意: 询问[a,b]中二进制位1最多且最小的数 贪心,假设开始每一位都是1 从高位i开始枚举, 如果当前数&g ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) A. Jeff and Rounding
http://codeforces.com/problemset/problem/351/A 题意: 2*n个数,选n个数上取整,n个数下取整 最小化 abs(取整之后数的和-原来数的和) 先使所有的 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) D. Jeff and Removing Periods
http://codeforces.com/problemset/problem/351/D 题意: n个数的一个序列,m个操作 给出操作区间[l,r], 首先可以删除下标为等差数列且数值相等的一些数 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) E. Jeff and Permutation
http://codeforces.com/contest/351/problem/E 题意: 给出一些数,可以改变任意数的正负,使序列的逆序对数量最少 因为可以任意加负号,所以可以先把所有数看作正数 ...
- CF&&CC百套计划3 Codeforces Round #204 (Div. 1) B. Jeff and Furik
http://codeforces.com/contest/351/problem/B 题意: 给出一个n的排列 第一个人任选两个相邻数交换位置 第二个人有一半的概率交换相邻的第一个数>第二个数 ...
- CF&&CC百套计划1 Codeforces Round #449 C. Willem, Chtholly and Seniorious (Old Driver Tree)
http://codeforces.com/problemset/problem/896/C 题意: 对于一个随机序列,执行以下操作: 区间赋值 区间加 区间求第k小 区间求k次幂的和 对于随机序列, ...
- CF&&CC百套计划1 Codeforces Round #449 B. Ithea Plays With Chtholly
http://codeforces.com/contest/896/problem/B 题意: 交互题 n张卡片填m个1到c之间的数,1<=n*ceil(c/2)<=m 最后填出一个单调非 ...
- CF&&CC百套计划1 Codeforces Round #449 A. Nephren gives a riddle
http://codeforces.com/contest/896/problem/A 第i个字符串嵌套第i-1个字符串 求第n个字符串的第k个字母 dfs #include<map> # ...
- Codeforces Round #276 (Div. 1) E. Sign on Fence (二分答案 主席树 区间合并)
链接:http://codeforces.com/contest/484/problem/E 题意: 给你n个数的,每个数代表高度: 再给出m个询问,每次询问[l,r]区间内连续w个数的最大的最小值: ...
随机推荐
- 【分享】20个非常有用的Java程序片段
福利来啦!!! 刚看到的一篇好东东,分享给大家,这些代码留着哦,以后会用得着的... 原文地址:http://developer.51cto.com/art/201306/398347.htm 1. ...
- c语言数字图像处理(三):仿射变换
仿射变换及坐标变换公式 几何变换改进图像中像素间的空间关系.这些变换通常称为橡皮模变换,因为它们可看成是在一块橡皮模上印刷一幅图像,然后根据预定的一组规则拉伸该薄膜.在数字图像处理中,几何变换由两个基 ...
- Siki_Unity_2-9_C#高级教程(未完)
Unity 2-9 C#高级教程 任务1:字符串和正则表达式任务1-1&1-2:字符串类string System.String类(string为别名) 注:string创建的字符串是不可变的 ...
- bugkuct部分writeup 持续更新
6307 校赛被打击到自闭,决心好好学习. web部分题目. 1.web2 地址 http://123.206.87.240:8002/web2/ 既然是第一个题我们应该采取查看源码的方式进行,右键之 ...
- PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法
贪心算法 次数最少的方法,即:1.每次都将0与应该放置在0位置的数字交换即可.2.如果0处在自己位置上,那么随便与一个不处在自己位置上的数交换,重复上一步即可.拿样例举例: 0 1 2 3 4 5 ...
- 《Linux内核--分析Linux内核创建一个新进程的过程 》 20135311傅冬菁
20135311傅冬菁 分析Linux内核创建一个新进程的过程 一.学习内容 进程控制块——PCB task_struct数据结构 PCB task_struct中包含: 进程状态.进程打开的文件. ...
- Linux内核分析——第一周学习笔记
20135313吴子怡.北京电子科技学院 chapter 1 知识点梳理 第一节 存储程序计算机工作模型 1.冯诺依曼体系结构:即具有存储程序的计算机体系结构.目前大多数拥有计算和存储功能的设备(智能 ...
- Teechart使用记录
一. Chart 1.1 Series 在该界面可以进行曲线的添加.删除.修改 1.2 General 在该界面 Margins 可以设置整个坐标系外边距. 在这里可是设置放大功能. All ...
- Daily Scrum 10.22
(写于10.22周四0晨) 昨天任务还未完成的继续完成任务. 每个人都查看自己的TFS,修改已经完成的任务状态,改为已关闭-已完成. 由于android studio运行过于慢,我们统一采取eclip ...
- NetFPGA Demo ——reference_nic_nf1_cml
NetFPGA Demo --reference_nic_nf1_cml 实验平台 OS:deepin 15.4 开发板:NetFPGA_1G_CML 实验过程 从NetFPGA-1G-CML从零开始 ...