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> ...
随机推荐
- Ecmascript 6新特性
声明变量由var变成let.let实际上为JavaScript新增了块级作用域.let与var相比具有的特性有 1.不允许重复声明一个变量 var a=5; var a=7; let b=6; let ...
- sublime自动生成头部注释
1.在tool->new snippet-创建一个新的snippet sublime text2 用snippet 创建文件头部信息 Snippets are smart templates t ...
- jeecg bootstrap修改单列模版
在作者原来的模版上增强单列模版 <%@ page language="java" import="java.util.*" contentType=&qu ...
- 修改jetty的默认端口号
jetty默认端口是8080,修改端口号也很简单,首先进入到jetty服务器安装目录下会看到start.ini配置文件,这里就是jetty启动时加载的配置,其中包括要加载的模块,超时时间配置还有这里的 ...
- php二进制安全的含义
PHP里,有string的概念.string里,每个字符的大小为byte(与PHP相比,Java的每个字符为Character,是UTF8字符,C语言的每个字符可以在编译时选择). byte里,有AS ...
- 前端模拟 图片上传---->>通过选取的图片获取其路径<<------
<head> <meta charset="UTF-8"> <title>Title</title> <style> d ...
- SQL中NULL值
SQL的表达式,除了IS NULL和NOT NULL以外,只要出现NULL值结果都为FALSE 简单的例子: SELECT * FROM table WHERE name!='abc' 只要name值 ...
- LeetCode 167 Two Sum II - Input array is sorted
Problem: Given an array of integers that is already sorted in ascending order, find two numbers such ...
- October 30th Week 45th Sunday 2016
Genius is nothing but labor and diligence. 天才不过是勤奋而已. Labor and diligence are the requirements for s ...
- 【转载】SSM框架整合
http://blog.csdn.net/gebitan505/article/details/44455235/ 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于20 ...