洛谷P4396 [AHOI2013]作业(树套树)
题意
Sol
为什么一堆分块呀。。三维数点不应该是套路离线/可持久化+树套树么。。
亲测树状数组套权值线段树可过
复杂度\(O(nlog^2n)\),空间\(O(nlogn)\)(离线)
#include<bits/stdc++.h>
#define Pair pair<int, int>
#define MP(x, y) make_pair(x, y)
#define fi first
#define se second
#define Fin(x) {freopen(#x".in","r",stdin);}
#define Fout(x) {freopen(#x".out","w",stdout);}
using namespace std;
const int MAXN = 4e5 + 10, SS = 1e7 + 10;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, a[MAXN], pre[MAXN], las[MAXN], Lim = 1e5, tot;
Pair ans[MAXN];
#define lb(x) (x & (-x))
struct BIT {
int T[MAXN];
void Add(int x, int v) {
x++;
while(x <= Lim) T[x] += v, x += lb(x);
}
int sum(int x) {
x++;
int ans = 0;
while(x) ans += T[x], x -= lb(x);
return ans;
}
int Query(int x, int y) {return sum(y) - sum(x - 1);}
}Q1;
struct query {
int k, a, b, id, p;
bool operator < (const query &rhs) const {
return k < rhs.k;
}
}q[MAXN];
int root[SS], sum[SS], ls[SS], rs[SS], cnt;
void update(int k) {
sum[k] = sum[ls[k]] + sum[rs[k]];
}
void insert(int &k, int l, int r, int p, int v) {
if(!k) k = ++cnt;
if(l == r) {sum[k]++; return ;}
int mid = l + r >> 1;
if(p <= mid) insert(ls[k], l, mid, p, v);
else insert(rs[k], mid + 1, r, p, v);
update(k);
}
int Query(int k, int l, int r, int ql, int qr) {
if(!k) return 0;
if(ql <= l && r <= qr) return sum[k];
int mid = l + r >> 1;
if(ql > mid) return Query(rs[k], mid + 1, r, ql, qr);
else if(qr <= mid) return Query(ls[k], l, mid, ql, qr);
else return Query(ls[k], l, mid, ql, qr) + Query(rs[k], mid + 1, r, ql, qr);
}
void Add(int x, int v) {
x++;
while(x <= Lim) insert(root[x], 0, Lim, v, 1), x += lb(x);
}
int Query(int x, int a, int b) {
x++;
int ans = 0;
while(x) ans += Query(root[x], 0, Lim, a, b), x -= lb(x);
return ans;
}
void Solve() {
int x = 0;
for(int i = 1; i <= tot; i++) {
while(x < q[i].k)
Q1.Add(a[++x], 1), Add(pre[x], a[x]);
ans[abs(q[i].id)].fi += (q[i].id / (abs(q[i].id))) * Q1.Query(q[i].a, q[i].b);
ans[abs(q[i].id)].se += (q[i].id / (abs(q[i].id))) * Query(q[i].p, q[i].a, q[i].b);
}
}
signed main() {
N = read(); M = read();
for(int i = 1; i <= N; i++) {
a[i] = read();
pre[i] = las[a[i]]; las[a[i]] = i;
}
for(int i = 1; i <= M; i++) {
int l = read(), r = read(), a = read(), b = read();
q[++tot].k = l - 1; q[tot].a = a; q[tot].b = b; q[tot].id = -i; q[tot].p = l - 1;
q[++tot].k = r; q[tot].a = a; q[tot].b = b; q[tot].id = i; q[tot].p = l - 1;
}
sort(q + 1, q + tot + 1);
Solve();
for(int i = 1; i <= M; i++) printf("%d %d\n", ans[i].fi, ans[i].se);
return 0;
}
洛谷P4396 [AHOI2013]作业(树套树)的更多相关文章
- bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)
题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...
- 洛谷 P4396 [AHOI2013]作业
题目描述 题目传送门 分析 因为询问是关于区间的,并且没有强制在线,所以能用莫队解决 但是还要支持查询区间内大于等于 \(a\),小于等于 \(b\) 的数的个数和数值的个数 所以还要套一个数据结构 ...
- 洛谷 P4396 (离散化+莫队+树状数组)
### 洛谷P4396 题目链接 ### 题目大意: 有 n 个整数组成的数组,m 次询问,每次询问中有四个参数 l ,r,a,b .问你在[l,r] 的区间内的所有数中,值属于[a,b] 的数的个 ...
- 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 & 3236 [Ahoi2013] 作业 题解
[原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 978 Solved: 476 Descri ...
- 「洛谷1903」「BZOJ2120」「国家集训队」数颜色【带修莫队,树套树】
题目链接 [BZOJ传送门] [洛谷传送门] 题目大意 单点修改,区间查询有多少种数字. 解法1--树套树 可以直接暴力树套树,我比较懒,不想写. 稍微口胡一下,可以直接来一个树状数组套主席树,也就是 ...
- 洛谷 P3380 bzoj3196 Tyvj1730 【模板】二逼平衡树(树套树)
[模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数值 查询k在 ...
- 洛谷P3380 【模板】二逼平衡树(树套树)(线段树+树状数组)
P3380 [模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数 ...
- 【洛谷3759】[TJOI2017] 不勤劳的图书管理员(树套树)
点此看题面 大致题意: 给定一个序列,每个元素有两个属性\(a_i\)和\(v_i\),每次操作改变两个元素的位置,求每次操作后\(\sum{v_i+v_j}[i<j,a_i>a_j]\) ...
- 【洛谷2617_BZOJ1901】Dynamic Rankings(树套树)
题目: 洛谷 2617 BZOJ 1901 是权限题,\(n=10^4\) ,内存 128 MB :洛谷 2617 \(n=10^5\) ,内存 1024 MB ,数据比较坑. 分析: 蒟蒻初学树套树 ...
随机推荐
- Windows Phone开发手记-WinRT下分组拼音的实现
Windows Phone版本号自升入8.1以来,开发者就多了一个选项,开发基于WinRT架构的WP或者Universal Windows App.然而开发框架转为WinRT后,很多原有的WP8基于S ...
- tensorflow进阶篇-5(反向传播1)
这里将讲解tensorflow是如何通过计算图来更新变量和最小化损失函数来反向传播误差的:这步将通过声明优化函数来实现.一旦声明好优化函数,tensorflow将通过它在所有的计算图中解决反向传播的项 ...
- Azure Storage架构介绍
Windows Azure Storage由三个重要部分或者说三种存储数据服务组成,它们是:Windows Azure Blob.Windows Azure Table和Windows Azure Q ...
- 查漏补缺之开g的正则
当正则表达式开了挂,就会多一个g的修饰符,用于表示全局匹配.然而这个表达式却不仅仅是多了个g这么简单,它的方法也会发生改变.由于之前不是太了解,今天好好捋一下,且听我细细道来. 正则表达式的方法和属性 ...
- 制作windows服务
1.下载winsw-1.8-bin.exe并更名: 2.配置winsw-1.8-bin.exe同上名<?xml version="1.0" encoding="UT ...
- Chrome 开发工具之Timeline/Performance
之前有说到Element,Console,Sources大多运用于debug,Network可用于debug和查看性能,今天的主角Timeline(现已更名Performance)更多的是用在性能优化 ...
- Ajax初始接触
演示JS对象的属性,方法和事件的使用 (1)window.location.href (2)form.submit() <form action="" method=&quo ...
- tomcat 调优-生产环境必备
目录 1. tomcat 启动慢 1.1 tomcat 获取随机值阻塞 1.2 tomcat 需要部署的web应用程序太多 1.3 tomcat启动内存不足 2 Connector 调优 2.2 Co ...
- java-jmx使用
先粘一段内容 .程序初哥一般是写死在程序中,到要改变的时候就去修改代码,然后重新编译发布. .程序熟手则配置在文件中(JAVA一般都是properties文件),到要改变的时候只要修改配置文件,但还是 ...
- CentOS7 下安装 iSCSI Target(tgt) ,使用 Ceph rbd
目录 一.iSCSI 介绍 1. iSCSI 定义 2. 几种常见的 iSCSI Target 3. 优缺点比较 二.安装步骤 1. 关闭防火墙 2. 关闭selinux 3. 通过 yum 安装 t ...