用树套树就很麻烦,用整体二分就成了裸题。。。。

错误:

1.尝试线段树套平衡树,码农,而且n*log^3(n)慢慢卡反正我觉得卡不过去

2.线段树pushdown写错。。。加法tag对于区间和的更新应该要乘上区间长度的

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
struct Q
{
LL type,a,b,c,num;
}q[],qt1[],qt2[];
LL ans[],qnum;
LL n,m;
namespace SegT
{
#define mid (l+((r-l)>>1))
#define lc (num<<1)
#define rc (num<<1|1)
LL dat[],addv[];
LL L,R,x;
void pd(LL l,LL r,LL num)
{
if(addv[num])
{
dat[lc]+=(mid-l+)*addv[num];addv[lc]+=addv[num];
dat[rc]+=(r-mid)*addv[num];addv[rc]+=addv[num];
addv[num]=;
}
}
void _addx(LL l,LL r,LL num)
{
if(L<=l&&r<=R) {dat[num]+=(r-l+)*x;addv[num]+=x;return;}
pd(l,r,num);
if(L<=mid) _addx(l,mid,lc);
if(mid<R) _addx(mid+,r,rc);
dat[num]=dat[lc]+dat[rc];
}
LL _query(LL l,LL r,LL num)
{
if(L<=l&&r<=R) return dat[num];
pd(l,r,num);LL ans=;
if(L<=mid) ans+=_query(l,mid,lc);
if(mid<R) ans+=_query(mid+,r,rc);
return ans;
}
void addx(LL l,LL r,LL d)
{
L=l;R=r;x=d;_addx(,n,);
}
LL query(LL l,LL r)
{
L=l;R=r;return _query(,n,);
}
#undef mid
#undef lc
#undef rc
}
void solve(LL lp,LL rp,LL l,LL r)
{
if(lp>rp) return;
LL i;
if(l==r)
{
for(i=lp;i<=rp;i++)
if(q[i].type==)
ans[q[i].num]=l;
return;
}
LL mid=l+((r-l)>>),tlen1=,tlen2=,t;
for(i=lp;i<=rp;i++)
{
if(q[i].type==)
{
if(q[i].c>mid)
{
SegT::addx(q[i].a,q[i].b,);
qt1[++tlen1]=q[i];
}
else
qt2[++tlen2]=q[i];
}
else
{
t=SegT::query(q[i].a,q[i].b);
if(t>=q[i].c)
qt1[++tlen1]=q[i];
else
qt2[++tlen2]=q[i],qt2[tlen2].c-=t;
}
}
for(i=lp;i<=rp;i++)
if(q[i].type==&&q[i].c>mid)
SegT::addx(q[i].a,q[i].b,-);
memcpy(q+lp,qt1+,sizeof(Q)*tlen1);
memcpy(q+lp+tlen1,qt2+,sizeof(Q)*tlen2);
solve(lp,lp+tlen1-,mid+,r);
solve(lp+tlen1,rp,l,mid);
}
int main()
{
LL i;
scanf("%lld%lld",&n,&m);
for(i=;i<=m;i++)
{
scanf("%lld%lld%lld%lld",&q[i].type,&q[i].a,&q[i].b,&q[i].c);
if(q[i].type==) q[i].num=++qnum;
}
solve(,m,-,);
for(i=;i<=qnum;i++) printf("%lld\n",ans[i]);
return ;
}

洛谷 P3332 [ZJOI2013]K大数查询 || bzoj3110的更多相关文章

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

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

  2. 洛谷 P3332 [ZJOI2013]K大数查询 (整体二分理解)

    链接: P3332 题意: 维护 \(n(1\leq n\leq 5\times10^4)\) 个可重整数集,编号从 \(1\) 到 \(n\).有 \(m(1\leq m\leq5\times10^ ...

  3. [洛谷P3332][ZJOI2013]K大数查询

    题目大意:有$n$个位置,$m$个操作.操作有两种: $1\;l\;r\;x:$在区间$[l,r]$每个位置加上一个数$x$ $2\;l\;r\;k:$询问$[l,r]$中第$k$大的数是多少. 题解 ...

  4. 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化

    Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...

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

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

  6. P3332 [ZJOI2013]K大数查询

    传送门 注意操作 $1$ 是在区间的每个位置加入一个数,不是加上一个值 相当于每个位置维护的是一个集合 显然树套树 一开始想的是区间线段树套权值线段树 发现这样询问区间第 $K$ 大时就要先二分答案再 ...

  7. P3332 [ZJOI2013]K大数查询 整体二分

    终于入门整体二分了,勉勉强强算是搞懂了一个题目吧. 整体二分很多时候可以比较好的离线处理区间\(K\)大值的相关问题.考虑算法流程: 操作队列\(arr\),其中有询问和修改两类操作. 每次在答案的可 ...

  8. 【BZOJ3110】【LG3332】[ZJOI2013]K大数查询

    [BZOJ3110][LG3332][ZJOI2013]K大数查询 题面 洛谷 BZOJ 题解 和普通的整体分治差不多 用线段树维护一下每个查询区间内大于每次二分的值\(mid\)的值即可 然后再按套 ...

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

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

随机推荐

  1. Oracle 用户表空间查看、修改大小、设置自增长等

      分类: Oracle 首先登入某个用户,查看某个用户在哪个表空间下: select username,default_tablespace from user_users; 查看该用户下所有的表: ...

  2. idea、jdk、eclispe中空main方法的线程数量不一样,why?

    測试代码: public class Test {     public static void main(String[] args) {         System.out.println(Th ...

  3. iptables防火墙以及网络协议基本原理

    一. Linux 网络安全模型 1. 防火墙: 工作在主机或者网络边缘,对进出报文使用实现定义的规则进行检测,并且由匹配的规则进行处理的一组硬件或者软件.也可能两者结合. 1) 通常使用的防火墙设备 ...

  4. hdoj 5093 Battle ships 【二分图最大匹配】

    题目:pid=5093" target="_blank">hdoj 5093 Battle ships 题意:给你一个n*m的图,图中有冰山 '# ',浮冰 'o' ...

  5. mac 通过 终端 ssh 远程连接 centos 服务器

    mac 通过 终端 ssh 远程连接 centos 服务器 在终端下输入 ssh -l root 204.74.*.*      就可以连接了,这是端口没变的情况,还是原来的22 ssh -p 448 ...

  6. WPF的WebBrowser屏蔽弹出脚本错误窗体

    WPF自带的WebBrowser在訪问一些有问题的网页时常常跳出非常多提示脚本错误的窗体, 可是WPF没有自带屏蔽这些窗体的方法或属性. 所以网上找来一使用反射的方法来屏蔽弹出脚本错误窗体的方法, 非 ...

  7. android动画具体解释四 创建动画

    使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合.ValueAnimator 使你能够对这些类型的值进行动画.你需通过调用ValueAnimator ...

  8. 交换分区 在dd命令执行期间 top 其消耗系统约14%的cpu,而mem占比约为0

    [资源不友好代码] from pyltp import * d_dir = '/usr/local/ltp_data_v3.4.0/' def gen_one_sentence_part(paragr ...

  9. 记一次部署java项目的问题

    项目里面有自动化任务, tomcat 错误信息 Table 'xxx.QRTZ_TRIGGERS' doesn't exist 提示在mysql中找不到这个表. 但mysql中确实存在,但名字是:qr ...

  10. bzoj1835: [ZJOI2010]base 基站选址

    新的一年新的开始.结果第一题就用了几乎一周.而且感觉很不好. 先检讨自己.最近写的各种数据结构模板基本没打过出来,各种细节崩盘,这题线段树都居然被lazy标记没清零卡挂. DP还是博大精深,这东西感觉 ...