[HEOI 2016] sort
[HEOI 2016] sort
解题报告
码线段树快调废我了= =
其实这题貌似暴力分很足,直接$STL$的$SORT$就能$80$
正解:
我们可以二分答案来做这道题
假设我们二分的答案为$a$,我们就可以将整个序列分为两个集合,一个是大于等于$a$的,一个是小于$a$的
那么我们就可以将大于等于$a$的赋值为$1$,小于$a$的赋值为$0$,那么对于排序,我们就变成了线段树区间覆盖,升序就将区间中所有的$0$覆盖到前面,$1$覆盖到后面,反之亦然。
最后我们查询询问位置的数,是$1$说明二分的答案小了,需要左边界右移,反之则右边界左移。
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
inline int read(){
int sum();
char ch(getchar());
for(;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=sum*+(ch^),ch=getchar());
return sum;
}
int n,m,q;
int op[],l[],r[];
int a[];
int sum[],add[];
inline void pushup(int i){
sum[i]=sum[i<<]+sum[i<<|];
}
inline void pushdown(int i,int len){
if(add[i]!=-){
add[i<<]=add[i];
add[i<<|]=add[i];
sum[i<<]=add[i]*(len-(len>>));
sum[i<<|]=add[i]*(len>>);
add[i]=-;
}
}
inline void build(int l,int r,int i,int x){
add[i]=-;
if(l==r){
if(a[l]>=x)
sum[i]=;
else
sum[i]=;
return;
}
int mid((l+r)>>);
build(l,mid,i<<,x);
build(mid+,r,i<<|,x);
pushup(i);
}
inline void update(int ll,int rr,int l,int r,int w,int i){//cout<<"update"<<ll<<' '<<rr<<' '<<l<<' '<<r<<' '<<w<<' '<<i<<endl;
if(ll>rr)
return;
if(ll<=l&&r<=rr){
sum[i]=w*(r-l+);
add[i]=w;
return;
}
pushdown(i,r-l+);
int mid((l+r)>>);
if(ll<=mid)
update(ll,rr,l,mid,w,i<<);
if(mid<rr)
update(ll,rr,mid+,r,w,i<<|);
pushup(i);
}
inline int query(int ll,int rr,int l,int r,int i){
if(ll<=l&&r<=rr)
return sum[i];
pushdown(i,r-l+);
int mid((l+r)>>),ret();
if(ll<=mid)
ret+=query(ll,rr,l,mid,i<<);
if(mid<rr)
ret+=query(ll,rr,mid+,r,i<<|);
return ret;
}
inline bool check(int x){
build(,n,,x);
for(int i=;i<=m;++i){//cout<<l[i]<<' '<<r[i]<<endl;
int tmp(query(l[i],r[i],,n,));//cout<<i<<' '<<op[i]<<' '<<l[i]<<' '<<r[i]<<endl;
if(op[i]==){//cout<<r[i]-tmp+1<<' '<<r[i]<<"devide"<<l[i]<<' '<<r[i]-tmp<<endl;
update(l[i],r[i]-tmp,,n,,);
if(tmp!=)
update(r[i]-tmp+,r[i],,n,,);
}
else{//cout<<l[i]<<' '<<l[i]+tmp-1<<"devide"<<l[i]+tmp<<' '<<r[i]<<endl;
update(l[i],l[i]+tmp-,,n,,);
if(tmp!=r[i]-l[i]+)
update(l[i]+tmp,r[i],,n,,);
}
}
return query(q,q,,n,);
}
inline void ef(int l,int r){
while(l+<r){
int mid((l+r)>>);
if(check(mid))
l=mid;
else
r=mid;
}
printf("%d",l);
}
inline int gg(){
freopen("heoi2016_sort.in","r",stdin);
freopen("heoi2016_sort.out","w",stdout);
n=read(),m=read();
for(int i=;i<=n;++i)
a[i]=read();
for(int i=;i<=m;++i)
op[i]=read(),l[i]=read(),r[i]=read();
q=read();
ef(,n);
// printf("%d",ans);
return ;
}
int K(gg());
int main(){;}
[HEOI 2016] sort的更多相关文章
- HEOI 2016 游记
闲来无事,把这玩意儿补上. OI生涯中第一次正经的考试.挂的很惨. Day -1 不小心把机油(雾)sm惹毛了. 好像没啥别的事儿. Day 0 说好了上午直接去机房,然而临时说让我们上完前两节课再去 ...
- [TJOI 2016&HEOI 2016]排序
Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这 ...
- [HEOI 2016] seq
题解: 发现多决策且明显无后效性,果断dp,那么转移方程F[i]=F[j]+1 设R[I]为改变之后的最大值,L[i]为改变之后的最小值 由于只能改变一个元素 所以转移的条件是 (j<i &am ...
- 数据结构(并查集||树链剖分):HEOI 2016 tree
[注意事项] 为了体现增强版,题目限制和数据范围有所增强: 时间限制:1.5s 内存限制:128MB 对于15% 的数据,1<=N,Q<=1000. 对于35% 的数据,1<=N,Q ...
- 字符串[未AC](后缀自动机):HEOI 2016 str
超级恶心,先后用set维护right,再用主席树维护,全部超时,本地测是AC的.放心,BZOJ上还是1S限制,貌似只有常数优化到一定境界的人才能AC吧. 总之我是精神胜利了哦耶QAQ #include ...
- [TJOI 2016&HEOI 2016]求和
Description 题库链接 求 \[f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\times 2^j \times (j!)\] \(S(i, j)\) 表示第二类斯 ...
- 解题:HEOI 2016 求和
题面 我们需要知道这样一个东西(大概叫 斯特林公式?) $S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^k C_j^k(j-k)^i$ 那么就是推啊 $=\ ...
- [ HEOI 2016 ] 树
\(\\\) Description 给出一颗树,开始只有 \(1\) 号节点有标记. \(\ C\ x\) 对 \(x\) 号节点打标记 \(\ Q\ x\) 查询 \(x\) 号节点深度最深的有标 ...
- COGS 2274. [HEOI 2016] tree
★☆ 输入文件:heoi2016_tree.in 输出文件:heoi2016_tree.out 简单对比时间限制:1 s 内存限制:128 MB 这道题数据弱到炸了 . 第一次做用树刨 ...
随机推荐
- 63.ExtJs事件(自定义事件、on、eventManager)示例
转自:https://blog.csdn.net/leadergg/article/details/5927614?utm_source=blogxgwz5 ExtJs事件(自定义事件.on.even ...
- 红黑树插入操作原理及java实现
红黑树是一种二叉平衡查找树,每个结点上有一个存储位来表示结点的颜色,可以是RED或BLACK.红黑树具有以下性质: (1) 每个结点是红色或是黑色 (2) 根结点是黑色的 (3) 如果一个结点是红色的 ...
- Canvas和SVG的基础知识,以及两者的区别(小白)
首先我们来说一下Canvas是什么,它有什么作用以及它的知识点. Canvas是<HTML5>的新标签,它通常用于通过脚本(也就是JavaScript)来绘制图像.但是它本身并没有绘制能力 ...
- Kafka详解与总结(三)
Kafka分片存储机制 几个kafka重要概念: Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群. Topic:一类消息,例如pa ...
- 【CodeForces727E/CF727E】Games on a CD (字符串哈希)
题目: CodeForces727E 分析: 看到字符串比较,肯定想到哈希啊--现学的哈希,先丢两个重要的公式 (\(seed\)是大于字符集大小的质数,\(p\)是大质数) \[hash[i]=(h ...
- [转]自适应网页设计(Responsive Web Design)
本文转自:http://www.ruanyifeng.com/blog/2012/05/responsive_web_design.html 作者: 阮一峰 日期: 2012年5月 1日 随着3G的普 ...
- Laravel5.1学习笔记20 EloquentORM 关系
Eloquent: Relationships Introduction Defining Relationships One To One One To Many Many To Many Has ...
- PHP第二阶段学习 一、php的基本语法
php的基本语法 输出语句:a. echo输出:可以输出多个字符串,逗号隔开 b. print输出:只能输出一个字符串,返回true或false c. print_r():可以把字符串和数字简单 ...
- 02--Java Socket编程--IO方式
一.基础知识 1. TCP状态转换知识,可参考: http://www.cnblogs.com/qlee/archive/2011/07/12/2104089.html 2. 数据传输 3. TCP/ ...
- C# 学习——静态(第四天)
一.命名空间 类似于文件夹,而类就是文件夹中的文件: 作用:明确的指向我们所需要的类的 所在的位置: 统一命名空间下,类名不能重复. 二.类 概念:具有相同属性和功能的对象的抽象的集合. 三.静态与实 ...


