bzoj3110树套树
wa一片,最后一个T,终于心碎了。。。
为什么没人告诉我要开longlong
为什么所有人都说没有负数
#include<cstdio>
#include<algorithm>
#define mid ((l+r)>>1)
using namespace std;
long long cas,a,b,c,k,l,r,n,m,sz;
int root[];
int ls[],rs[],sum[],lazy[];
void pushdown(int k,int l,int r)
{
if(!lazy[k]||l==r)return;
if(!ls[k])ls[k]=++sz;
if(!rs[k])rs[k]=++sz;
lazy[ls[k]]+=lazy[k];lazy[rs[k]]+=lazy[k];
sum[ls[k]]+=(mid-l+)*lazy[k];
sum[rs[k]]+=(r-mid)*lazy[k];
lazy[k]=;
}
void add(int k,int l,int r,int a,int b)
{
if(l==a&&r==b)
{
sum[k]+=r-l+;
lazy[k]++;
return;
}
pushdown(k,l,r);
if(a<=mid)ls[k]=ls[k]?ls[k]:++sz,add(ls[k],l,mid,a,min(b,mid));
if(b>mid)rs[k]=rs[k]?rs[k]:++sz,add(rs[k],mid+,r,max(mid+,a),b);
sum[k]=sum[ls[k]]+sum[rs[k]];
}
long long que(int k,int l,int r,int a,int b)
{
if(!k)return ;
if(l==a&&r==b)return sum[k];
pushdown(k,l,r);
if(b<=mid)return que(ls[k],l,mid,a,b);
else if(a>mid)return que(rs[k],mid+,r,a,b);
else return que(ls[k],l,mid,a,mid)+que(rs[k],mid+,r,mid+,b);
}
int solve()
{
int l=,r=*n,k=;
while(l!=r)
{
long long t=que(root[k<<|],,n,a,b);
if(c<=t)l=mid+,k=k<<|;
else r=mid,k=k<<,c-=t;
}
return l;
}
int main()
{
for(scanf("%d%d",&n,&m);m;m--)
{
scanf("%d%d%d%d",&cas,&a,&b,&c);
if(cas==)
for(k=,l=,r=*n,c+=n;l!=r;root[k]=root[k]?root[k]:++sz,add(root[k],,n,a,b))
if(c<=mid)r=mid,k=k<<;
else l=mid+,k=k<<|;
else printf("%d\n",solve()-n);
}
return ;
}
这次代码还是比较优美的
bzoj3110树套树的更多相关文章
- BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...
- bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】
模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = ...
- [BZOJ3110] [Zjoi2013] K大数查询 (树套树)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置 ...
- BZOJ3110 K大数查询 【线段树 + 整体二分 或 树套树(非正解)】
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- BZOJ 3110: [Zjoi2013]K大数查询 [树套树]
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6050 Solved: 2007[Submit][Sta ...
- BZOJ4170 极光(CDQ分治 或 树套树)
传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 ...
- bzoj3262: 陌上花开(树套树)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- bzoj3295: [Cqoi2011]动态逆序对(树套树)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- BZOJ 3110 k大数查询 & 树套树
题意: 有n个位置,每个位置可以看做一个集合,现在要求你实现一个数据结构支持以下功能: 1:在a-b的集合中插入一个数 2:询问a-b集合中所有元素的第k大. SOL: 调得火大! 李建说数据结构题能 ...
- BZOJ 3110 树套树 && 永久化标记
感觉树套树是个非常高深的数据结构.从来没写过 #include <iostream> #include <cstdio> #include <algorithm> ...
随机推荐
- iOS如何彻底避免数组越界
我们先来看看有可能会出现的数组越界Crash的地方: ? 1 2 3 4 5 6 7 - (void)tableView:(UITableView *)tableView didSelectRowAt ...
- Ajax深入解析
AJAX:Asynchronous JavaScript And Xml(异步的JS和XML) 同步:客户端发起请求>服务端的处理和响应>客户端重新载入页面(循环) 异步:客户端实时请求& ...
- linux Mint wine安装qq,桌面快捷键配置
在桌面新建qq.desktop文件,添加以下内容 #!/usr/bin/env xdg-open[Desktop Entry]Comment=QQTerminal=falseName=QQExec=w ...
- ping 或者ssh 发生connect: No buffer space available 错误
如果遇到这种情况,一般说明你的本地服务器的arp表缓存太大,而服务器内核设定的回收条数太小,一直被回收造成的. 可以用一下命令扩大arp表可以缓存的记录条数: echo 512 > /proc/ ...
- Moving Average from Data Stream
Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...
- php实验5数组
1.自定义两个数组,分别为索引数组和关联数组,每个数组必须至少有4个元素,使用print_r( )函数输出数组元素. 2.编写一个随机抽奖程序,示例运行结果如下: 3.定义一个三维数组$categor ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 【python】nuitka封装python
官网:http://nuitka.net/doc/user-manual.html python打包工具对比:http://blog.csdn.net/qwemicheal/article/detai ...
- 关于VPN的一些问题
在今在外出差,必须得连上公司的数据库,那就得使用VPN了,设置起来还算比较简单(我是win10), 简单介绍一下: 打开设置或者直接点击右下角的
- debian8安装Odoo中的Barcode Scanner Hardware Driver模块时,提示没有evdev
解决方法: $ apt-get install python-dev python-pip gcc $ apt-get install linux-headers-$(uname -r) $ sudo ...