3110: [Zjoi2013]K大数查询

Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 9208  Solved: 2737 [Submit][Status][Discuss]

Description

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

Input

第一行N,M 接下来M行,每行形如1 a b c或2 a b c

Output

输出每个询问的结果

Sample Input

2 5
1 1 2 1
1 1 2 2
2 1 1 2
2 1 1 1
2 1 2 3

Sample Output

1
2
1

HINT

【样例说明】
第一个操作 后位置 1 的数只有 1 , 位置 2 的数也只有 1 。 第二个操作 后位置 1
的数有 1 、 2 ,位置 2 的数也有 1 、 2 。 第三次询问 位置 1 到位置 1 第 2 大的数 是
1 。 第四次询问 位置 1 到位置 1 第 1 大的数是 2 。 第五次询问 位置 1 到位置 2 第 3
大的数是 1 。‍

N,M<=50000,N,M<=50000
a<=b<=N
1操作中abs(c)<=N
2操作中c<=Maxlongint

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cstdlib>
 5 #include<cmath>
 6 #include<algorithm>
 7 #define M 15000000
 8 using namespace std;
 9 long long read()
10 {
11     long long x=0,f=1;char ch=getchar();
12     while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
13     while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}
14     return x*f;
15 }
16 long long cnt=0;
17 long long n,m;
18 long long a,b,c;
19 long long root[200005],sum[M],ls[M],rs[M],lazy[M];
20 void add(long long &now,long long l,long long r,long long L,long long R)
21 {
22     if(!now) now=++cnt;
23     long long mid=(l+r)>>1;
24     if(l>=L&&r<=R){sum[now]+=r-l+1,lazy[now]++; return;}
25     if(L<=mid)add(ls[now],l,mid,L,R);
26     if(R>mid)add(rs[now],mid+1,r,L,R);
27     sum[now]+=min(R,r)-max(L,l)+1;
28 }
29 long long ask(long long now,long long l,long long r,long long L,long long R)
30 {
31     if(!now) return 0;
32     long long mid=(l+r)>>1;
33     if(l>=L&&r<=R) return sum[now];
34     long long ans=0;
35     if(L<=mid) ans+=ask(ls[now],l,mid,L,R);
36     if(R>mid)ans+=ask(rs[now],mid+1,r,L,R);
37     return ans+(min(R,r)-max(L,l)+1)*lazy[now];
38 }
39 void insert()
40 {
41     long long l=1,r=n,now=1;
42     while(l<r)
43     {
44         long long mid=(l+r)>>1;
45         add(root[now],1,n,a,b);
46         if(c<=mid) r=mid,now<<=1;
47         else l=mid+1,now=(now<<1)+1;
48     }
49     add(root[now],1,n,a,b);
50 }
51 long long query()
52 {
53     long long l=1,r=n,now=1;
54     while(l<r)
55     {
56         long long mid=(l+r)>>1;
57         now<<=1;
58         long long k=ask(root[now+1],1,n,a,b);
59         if(k>=c) l=mid+1,now++;
60         else r=mid,c-=k;
61     }
62     return l;
63 }
64 int main()
65 {
66     n=read(),m=read();
67     while(m--)
68     {
69         long long flag=read();a=read(),b=read(),c=read();
70         if(flag==1) insert();
71         else printf("%lld\n",query());
72     }
73 }

View Code

转载于:https://www.cnblogs.com/wls001/p/7553690.html

[BZOJ3110] [Zjoi2013]K大数查询相关推荐

  1. BZOJ3110: [Zjoi2013]K大数查询

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

  2. bzoj3110 [Zjoi2013]K大数查询

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

  3. bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】

    //========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/  转载要声明! //=============== ...

  4. BZOJ3110: [Zjoi2013]K大数查询(整体二分)

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

  5. 洛谷 P3332 [ZJOI2013]K大数查询 解题报告

    P3332 [ZJOI2013]K大数查询 题目描述 有\(N\)个位置,\(M\)个操作.操作有两种,每次操作如果是\(\tt{1\ a\ b\ c}\)的形式表示在第\(a\)个位置到第\(b\) ...

  6. P3332 [ZJOI2013]K大数查询(整体二分做法)

    P3332 [ZJOI2013]K大数查询 题意: 题解: 利用整体二分来做,这个题和P3834 [模板]可持久化线段树 2的区别在于本题的修改是区间修改,所以将里面的树状数组改成线段树就行,区间修改 ...

  7. 3110: [Zjoi2013]K大数查询

    3110: [Zjoi2013]K大数查询 https://lydsy.com/JudgeOnline/problem.php?id=3110 分析: 整体二分+线段树. 两种操作:区间加入一个数,区 ...

  8. bzoj 3110: [Zjoi2013]K大数查询(树套树)

    树套树: 本质:一棵树的每个节点套着另一棵树 通常时间复杂度:O(nlog²n) 空间复杂度:因为树的大小是nlogn,而每个节点又有一棵nlogn的树,所以最大空间复杂度为O(n²log²) 但事实 ...

  9. [ZJOI2013]K大数查询

    Description: 给定一个序列,支持两种操作 1.在[L,R]的每个位置上加上一个数 (注意一个位置上有多个数) 2.查询[L,R]上所有数中的第K大 Hint: \(n,m<=5e4\ ...

最新文章

  1. BZOJ2494 Triangles and Quadrangle
  2. POJ 1944 - Fiber Communications
  3. 计算机系统加固方法有哪些,计算机系统的加固 .doc
  4. FFMPEG音视频同步-音频实时采集编码封装成MP4
  5. Java8--Lambda表达式对List集合操作
  6. Policy-based RL小结(Policy Gradient ; Natural policy gradient ;TRPO;ACKTR;PPO )
  7. halcon直线标定板对相机标定的效果评估(对比矫正前后、对比标定板矫正效果)
  8. URL转微信可识别的二维码
  9. python 二叉树递归时明明已经得到了结果,但是返回None
  10. php执行查询的代码,PHP实现动态执行代码的方法
  11. IDEA类和方法注释模板设置(非常详细)
  12. CVPR 2021 论文和开源项目合集
  13. C语言之基本算法34—分解质因数(方法一)
  14. 镜头MTF值的基本原理和解读
  15. 《软件设计师》复习总结
  16. 定位弹窗软件----找到真凶并做后续防御
  17. 基于云服务器 B/S模式 JavaWeb RFID 图书借阅管理系统
  18. 集合之ArrayDeque
  19. JAVA基础语法笔记(黑马程序员系列)
  20. 我想当计算机工程师英语翻译,工程师英语怎么说

热门文章

  1. java 集合 总结 表_java 列表与集合总结
  2. java 中的string_Java中String揭秘
  3. End-to-end Recovery of Human Shape and Pose
  4. 19复变函数的积分(五)
  5. 【java】矩阵的求解
  6. Python进程间通信之管道Pipe
  7. python添加一个球_在Python中创建一个旋转球体
  8. 文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0
  9. 基于R-Net、QA-Net和BiDAF实现中文观点型问题机器阅读理解
  10. jquery如何拿到一个对象_jQuery 怎么获取对象