题意:BC 76 div1 1004 有中文题面

然后奉上官方题解:

这是一道良心的基础数据结构题。

我们二分a[k]的值,假设当前是mid,然后把大于mid的数字标为1,不大于mid的数字标为0。然后对所有操作做完以后检查一下a[k]位置上是0还是1。

因为只有两种值,所以操作还是不难做的。只要用一个线段树,支持区间求和、区间赋值即可。

这样要排序一个区间时只要查询一下里面有几个1和几个0,然后把前半段赋值为0,后半段赋值为1即可(降序的话就是反过来)。

复杂度是O(mlog^2n)。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=1e5+;
int a[N],b[N],T,n,m,k;
int sum[N<<];
int lz[N<<];
int pushup(int rt){
sum[rt]=sum[rt<<]+sum[rt<<|];
}
void pushdown(int rt,int l,int r){
if(lz[rt]!=-){
int mid=(l+r)>>;
sum[rt<<]=lz[rt]*(mid-l+);
sum[rt<<|]=lz[rt]*(r-mid);
lz[rt<<]=lz[rt<<|]=lz[rt];
lz[rt]=-;
}
}
void build(int rt,int l,int r){
lz[rt]=-;
if(l==r){
sum[rt]=b[l];
return;
}
int mid=(l+r)>>;
build(rt<<,l,mid);
build(rt<<|,mid+,r);
pushup(rt);
}
void update(int rt,int l,int r,int x,int y,int t){
if(x<=l&&r<=y){
sum[rt]=t*(r-l+);
lz[rt]=t;
return;
}
int mid=(l+r)>>;
pushdown(rt,l,r);
if(x<=mid)update(rt<<,l,mid,x,y,t);
if(y>mid)update(rt<<|,mid+,r,x,y,t);
pushup(rt);
}
int query(int rt,int l,int r,int x,int y){
if(x<=l&&r<=y)return sum[rt];
int mid=(l+r)>>;
pushdown(rt,l,r);
if(y<=mid)return query(rt<<,l,mid,x,y);
else if(x>mid)return query(rt<<|,mid+,r,x,y);
return query(rt<<,l,mid,x,y)+query(rt<<|,mid+,r,x,y);
}
struct op{
int x,y,t;
}o[N];
bool check(int x){
for(int i=;i<=n;++i)
b[i]=a[i]>x?:;
build(,,n);
for(int i=;i<=m;++i){
int tmp=query(,,n,o[i].x,o[i].y);
if(!o[i].t){
if(o[i].x<=o[i].y-tmp)update(,,n,o[i].x,o[i].y-tmp,);
if(o[i].y-tmp+<=o[i].y)update(,,n,o[i].y-tmp+,o[i].y,);
}
else{
if(o[i].x<=o[i].x+tmp-)update(,,n,o[i].x,o[i].x+tmp-,);
if(o[i].x+tmp<=o[i].y)update(,,n,o[i].x+tmp,o[i].y,);
}
}
return query(,,n,k,k)==;
}
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
scanf("%d",&a[i]);
for(int i=;i<=m;++i)
scanf("%d%d%d",&o[i].t,&o[i].x,&o[i].y);
scanf("%d",&k);
int l=,r=n;
while(l<r){
int mid=(l+r)>>;
if(check(mid))l=mid+;
else r=mid;
}
printf("%d\n",(l+r)>>);
}
return ;
}

HDU5649 DZY Loves Sorting 线段树的更多相关文章

  1. CF444C. DZY Loves Colors[线段树 区间]

    C. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. Codeforces Round #254 (Div. 1) C. DZY Loves Colors 线段树

    题目链接: http://codeforces.com/problemset/problem/444/C J. DZY Loves Colors time limit per test:2 secon ...

  3. Codeforces 444C DZY Loves Colors(线段树)

    题目大意:Codeforces 444C DZY Loves Colors 题目大意:两种操作,1是改动区间上l到r上面德值为x,2是询问l到r区间总的改动值. 解题思路:线段树模板题. #inclu ...

  4. Codeforces 444 C. DZY Loves Colors (线段树+剪枝)

    题目链接:http://codeforces.com/contest/444/problem/C 给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作: 将区间[L,R]的值 ...

  5. 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)

    ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...

  6. codeforces 444 C. DZY Loves Colors(线段树)

    题目大意: 1 l r x操作 讲 [l,r]上的节点涂成x颜色,而且每一个节点的值都加上 |y-x| y为涂之前的颜色 2 l r  操作,求出[l,r]上的和. 思路分析: 假设一个区间为同样的颜 ...

  7. 数据结构(线段树):HDU 5649 DZY Loves Sorting

    DZY Loves Sorting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Oth ...

  8. HDU 5649.DZY Loves Sorting-线段树+二分-当前第k个位置的数

    DZY Loves Sorting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Oth ...

  9. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

随机推荐

  1. 如何编写规范,灵活,稳定,高质量的HTML和css代码

    黄金定律 永远遵循同一套编码规范,不管有多少人共同参与同一项目,一定要确保每一行代码都像是同一个人编写的. 语法: 1.用两个空格来代替制表符(tab);2.嵌套元素应当缩进一次(两个空格); 3.对 ...

  2. NOSQL之【WIN7的安装配置】

    1.下载安装 大家根据各自系统配置,下载相对应的redis版本.我下载是redis 2.6 将redis.conf 复制到 bin/release/redisbin 里面 redis-server.e ...

  3. JS获得QQ号码的昵称,头像,生日

    这篇文章主要介绍了JS获得QQ号码的昵称,头像,生日的简单实例,有需要的朋友可以参考一下 http://r.qzone.qq.com/cgi-bin/user/cgi_personal_card?ui ...

  4. PHP开发圣经读书笔记01

    从今天开始,以“圣经”这本书为教材,系统的温习一下php,之前都是看视频学的. 1.访问表单变量--php变量名称必须与表单域的名称一致 例:$_POST['uname'];  //表示把表单域中na ...

  5. org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode

    [spring]:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowe ...

  6. 使用Github总结

    1. 使用Git GUI 首先熟悉一下GUI,如下: 第一步,首先将代码fork到自己的版本库下面,如下: 并获取clone URL,如下图: 然后点击GUI克隆已有版本库,如下图: 点击克隆就可以得 ...

  7. R语言和大数据

    #安装R语言R3.3版本会出现各种so不存在的问题,退回去到R3.1版本时候就顺利安装.在安装R环境之前,先安装好中文(如果没有的话图表中显示汉字成框框了)和tcl/tk包(少了这个没法安装sqldf ...

  8. python zookeeper 学习笔记

    1.安装zookeeper 下载zookeeper后,解压,安装 cd zookeeper-/src/c ./configure make make install 2.启动zookeeper服务 c ...

  9. hadoop基本命令1

    (大讲台——国内首个it在线混合式自适应学习平台,轻量级的高薪就业和技能提升解决方案) 1.列出所有Hadoop Shell支持的命令$ bin/hadoop fs -help2.显示关于某个命令的详 ...

  10. JSP中pageEncoding和charset区别,中文乱码解决方案(转载)

    转载自:JSP中pageEncoding和charset区别,中文乱码解决方案 JSP指令标签中<%@ page contentType="text/html;charset=GB23 ...