1. [ZJOI2013] K大数查询

/*
树套树写法.
bzoj过不了.
可能有负数要离散吧.
线段树套线段树.
外层权值线段树,内层区间线段树维护标记.
对权值建一棵权值线段树.
某个点表示权值在某个范围内的数的个数.
然后对每个点建一棵区间线段树.
表示该权值范围在某个区间的数的个数.
然后查找用类似二分的思想.
*/
#include<iostream>
#include<cstdio>
#define MAXN 50001
using namespace std;
struct data{int lc,rc,sum,size,bj;}tree[MAXN*400];
int n,m,root[MAXN],cut;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void push(int k,int l,int r)
{
if(!tree[k].lc) tree[k].lc=++cut;
if(!tree[k].rc) tree[k].rc=++cut;
tree[tree[k].lc].bj+=tree[k].bj;
tree[tree[k].rc].bj+=tree[k].bj;
int mid=(l+r)>>1;
tree[tree[k].lc].sum+=(mid-l+1)*tree[k].bj;
tree[tree[k].rc].sum+=(r-mid)*tree[k].bj;
tree[k].bj=0;
return ;
}
void add(int &k,int l,int r,int x,int y)
{
if(!k) k=++cut;
if(x==l&&r==y)
{
tree[k].bj++;
tree[k].sum+=r-l+1;
return ;
}
if(tree[k].bj) push(k,l,r);
int mid=(l+r)>>1;
if(y<=mid) add(tree[k].lc,l,mid,x,y);
else if(x>mid) add(tree[k].rc,mid+1,r,x,y);
else add(tree[k].lc,l,mid,x,mid),add(tree[k].rc,mid+1,r,mid+1,y);
tree[k].sum=tree[tree[k].lc].sum+tree[tree[k].rc].sum;
return ;
}
void sloveadd(int x,int y,int z)
//先找到它所在权值的位置然后在[x,y]处加入贡献.
{
int l=1,r=n,k=1,mid;
while(l!=r)
{
mid=(l+r)>>1;
add(root[k],1,n,x,y);
if(z<=mid) r=mid,k=k<<1;
else l=mid+1,k=(k<<1)+1;
}
add(root[k],1,n,x,y);
return ;
}
int query(int k,int l,int r,int x,int y)
{
if(!k) return 0;
if(tree[k].bj) push(k,l,r);
if(x<=l&&r<=y) return tree[k].sum;
int tot=0,mid=(l+r)>>1;
if(x<=mid) tot+=query(tree[k].lc,l,mid,x,y);
if(y>mid) tot+=query(tree[k].rc,mid+1,r,x,y);
return tot;
}
int slovequery(int x,int y,int z)
{
int l=1,r=n,k=1;
while(l!=r)
{
int mid=(l+r)>>1;
int t=query(root[k<<1],1,n,x,y);
if(t>=z) r=mid,k<<=1;
else l=mid+1,k=(k<<1)+1,z-=t;
}
return l;
}
int main()
{
freopen("zjoi13_sequence.in","r",stdin);
freopen("zjoi13_sequence.out","w",stdout);
int k,x,y,z;
n=read(),m=read();
while(m--)
{
k=read(),x=read(),y=read(),z=read();
if(k&1) sloveadd(x,y,n-z+1);
else printf("%d\n",n-slovequery(x,y,z)+1);
}
return 0;
}

Cogs 1345. [ZJOI2013] K大数查询(树套树)的更多相关文章

  1. P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)

    P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树 把插入的值离散化一下开个线段树 蓝后每个节点开个线段树,维护一下每个数出现的区间和次数 为了防止MLE动态开点就好辣 重点是标记永久 ...

  2. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  3. BZOJ.3110.[ZJOI2013]K大数查询(整体二分 树状数组/线段树)

    题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系 ...

  4. BZOJ 3110: [Zjoi2013]K大数查询 [树套树]

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6050  Solved: 2007[Submit][Sta ...

  5. 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 &amp; 3236 [Ahoi2013] 作业 题解

    [原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 978  Solved: 476 Descri ...

  6. bzoj 3110: [Zjoi2013]K大数查询 树状数组套线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1384  Solved: 629[Submit][Stat ...

  7. BZOJ 3110: [Zjoi2013]K大数查询( 树状数组套主席树 )

    BIT+(可持久化)权值线段树, 用到了BIT的差分技巧. 时间复杂度O(Nlog^2(N)) ---------------------------------------------------- ...

  8. BZOJ 3110([Zjoi2013]K大数查询-区间第k大[段修改,在线]-树状数组套函数式线段树)

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec   Memory Limit: 512 MB Submit: 418   Solved: 235 [ Submit][ ...

  9. 【BZOJ3110】[Zjoi2013]K大数查询 树套树

    [BZOJ3110][Zjoi2013]K大数查询 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c,如果 ...

随机推荐

  1. (转)从0移植uboot (二) _uboot启动流程分析

    ref:https://www.cnblogs.com/xiaojiang1025/p/6496704.html 经过了上一篇的配置,我们已经执行make就可以编译出一个uboot.bin,但这还不够 ...

  2. Skip List(跳跃表)原理详解与实现

    ref : https://dsqiu.iteye.com/blog/1705530   本文内容框架: §1 Skip List 介绍 §2 Skip List 定义以及构造步骤   §3 Skip ...

  3. PHP运行机制和原理

    以echo "Hello World";为例 经历五个步骤:1.扫描(scanning):先进行语法分析和词法分析,然后将index.php内容变成一个个语言片段(token ar ...

  4. 12.2备库rman使用delete删除归档日志报错RMAN-08137: WARNING: archived log not deleted, needed for standby or upstream capture process

    问题: 客户环境12.2 dg备库环境,定时清理归档脚本并未正常清理归档日志文件. 观察日志可以发现存在如下信息 RMAN-08137: WARNING: archived log not delet ...

  5. Spring Boot 多个域名指向同一IP

    一.需求:直接通过域名访问首页(同一应用下,多个首页,包括PC端.手机端首页) 方法:采用多个域名绑定同一IP下同一应用,不同域名对应不同产品(PC.手机端)的方法,在后台通过拦截器判断 reques ...

  6. Angular 调试

    我们新建一个项目.执行 ng server 会启动一个网站. 1. 执行 where ng .看看ng 是什么. D:\Abp学习\angular\Mytest>where ng C:\User ...

  7. Android蓝牙遥控器APP关键代码 guihub项目

    package com.car.demo; import java.io.IOException; import java.io.OutputStream; import java.util.UUID ...

  8. ASP.NET WEB应用程序(.network4.5)MVC Razor视图引擎2

    https://www.bbsmax.com/A/gAJG67OXzZ/ 在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASP ...

  9. XCode下在不同位置声明变量的用法(转)

    XCode下在不同位置声明变量的用法 方式一:直接在.h文件@interface中的大括号中声明. @interface Test : NSObject { NSString *str; // 私有变 ...

  10. django 2.0 xadmin 错误集锦

    转载 django 2.0 xadmin 错误集锦 2018-03-26 10:39:18 Snail0Li 阅读数 5188更多 分类专栏: python   1.django2.0把from dj ...