Luogu 4867 Gty的二逼妹子序列
BZOJ3809,是权限题。
我永远喜欢莫队。
先莫队一下移下左右指针,然后用一个数据结构维护一下区间$[a, b]$中的颜色的值,跟着指针移动一起修改修改,每一次$query$的时候就相当于查询一下$[a, b]$中的和。
其实可以直接对颜色进行分块,维护一下块内的值以及每一个位置的答案,每一次修改是$O(1)$的,每一次查询是$O(\sqrt{n})$的,因为总共要进行$m$次查询,所以总的时间复杂度是$O((n + m)\sqrt{n})$,这样写可以比树状数组以及其他的数据结构少一个$log$。
然而这个$log$在你谷上跑的飞快……
最近真是颓了。
Code:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1e5 + ;
const int M = 1e6 + ; int n, qn, a[N], blo, ans[N];
int cnt[N], bel[N], ln[N], rn[N]; struct Querys {
int l, r, st, ed, id, ans;
} q[M]; bool cmp(const Querys &x, const Querys &y) {
if(bel[x.l] == bel[y.l]) return x.r < y.r;
else return x.l < y.l;
} inline void read(int &X) {
X = ; char ch = ; int op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} inline int query(int st, int ed) {
int res = ;
if(bel[st] == bel[ed]) {
for(int i = st; i <= ed; i++)
if(cnt[i]) res++;
} else {
for(int i = st; i <= rn[bel[st]]; i++)
if(cnt[i]) res++;
for(int i = ln[bel[ed]]; i <= ed; i++)
if(cnt[i]) res++;
for(int i = bel[st] + ; i <= bel[ed] - ; i++)
res += ans[i];
}
return res;
} inline void add(int x) {
++cnt[a[x]];
if(cnt[a[x]] == ) ans[bel[a[x]]]++;
} inline void del(int x) {
--cnt[a[x]];
if(cnt[a[x]] == ) ans[bel[a[x]]]--;
} inline void solve() {
sort(q + , q + + qn, cmp);
for(int l = , r = , i = ; i <= qn; i++) {
for(; l < q[i].l; del(l++));
for(; l > q[i].l; add(--l));
for(; r < q[i].r; add(++r));
for(; r > q[i].r; del(r--));
q[q[i].id].ans = query(q[i].st, q[i].ed);
}
} int main() {
read(n), read(qn);
for(int i = ; i <= n; i++) read(a[i]); blo = sqrt(n);
for(int i = ; i <= blo; i++) {
ln[i] = (i - ) * blo + ;
rn[i] = i * blo;
}
if(rn[blo] < n)
++blo, ln[blo] = rn[blo - ] + , rn[blo] = n;
for(int i = ; i <= blo; i++) {
for(int j = ln[i]; j <= rn[i]; j++)
bel[j] = i;
} for(int i = ; i <= qn; i++) {
read(q[i].l), read(q[i].r), read(q[i].st), read(q[i].ed);
q[i].id = i;
} solve(); for(int i = ; i <= qn; i++)
printf("%d\n", q[i].ans);
return ;
}
Luogu 4867 Gty的二逼妹子序列的更多相关文章
- 【题解】Luogu P4867 Gty的二逼妹子序列
原题传送门 同Luogu P4396 [AHOI2013]作业 询问多了10倍,但还能跑过(smog #include <bits/stdc++.h> #define N 100005 # ...
- BZOJ 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1387 Solved: 400[Submit][Status][Di ...
- 【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1072 Solved: 292[Submit][Status][Di ...
- Bzoj 3809: Gty的二逼妹子序列 莫队,分块
3809: Gty的二逼妹子序列 Time Limit: 35 Sec Memory Limit: 28 MBSubmit: 868 Solved: 234[Submit][Status][Dis ...
- 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 链接 分析: 和这道AHOI2013 作业差不多.权值是1~n的,所以对权值进行分块.$O(1)$修改,$O(\sqrt n)$查询. 代码: #include< ...
- 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1728 Solved: 513 Description Autumn ...
- 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块
[BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...
- [AHOI2013]作业 & Gty的二逼妹子序列 莫队
---题面--- 题解: 题目要求统计一个区间内数值在[a, b]内的数的个数和种数,而这个是可以用树状数组统计出来的,所以可以考虑莫队. 考虑区间[l, r]转移到[l, r + 1],那么对于维护 ...
- [bzoj3809]Gty的二逼妹子序列_莫队_分块
Gty的二逼妹子序列 bzoj-3809 题目大意:给定一个n个正整数的序列,m次询问.每次询问一个区间$l_i$到$r_i$中,权值在$a_i$到$b_i$之间的数有多少个. 注释:$1\le n\ ...
随机推荐
- NYOJ-626-intersection set(二分查找)
题目链接 /* Name:NYOJ-626-intersection set Copyright: Author: Date: 2018/4/12 21:30:10 Description: 二分查找 ...
- 获得客户端ip
获得客户端ip private function GetIP(){ if(!empty($_SERVER["HTTP_CLIENT_IP"])){ ...
- bzoj 4710 分特产
有 $n$ 个人,$m$ 种物品,每种物品有 $a_i$ 个,求每个人至少分到一个的方案数 $n,m,a_i \leq 2000$ sol: 比上一个题简单一点 还是考虑容斥 每个人至少分到一个 = ...
- MeshBaker
https://blog.csdn.net/z9895512/article/details/52297387 详细教程直接贴一个其他人写的教程,这个人写得很详细,插件的各种功能几乎都有教程: htt ...
- HTML(超文本标记语言)
学习地址:https://developer.mozilla.org/zh-CN/docs/Web/Html
- Poj 2421 Constructing Roads(Prim 最小生成树)
题意:有几个村庄,要修最短的路,使得这几个村庄连通.但是现在已经有了几条路,求在已有路径上还要修至少多长的路. 分析:用Prim求最小生成树,将已有路径的长度置为0,由于0是最小的长度,所以一定会被P ...
- 使用spring-boot-starter-amqp开发生产者应用
上一篇我们介绍了如何使用spring AMQP和RabbitMQ结合,开发消费者应用程序,使用的是Xml配置的Spring框架. 本篇我们仍然使用Spring AMQP开发生产者应用,不过我们使用零 ...
- Sass、Less和Stylus
1.背景介绍 1.Sass背景介绍 Sass是对CSS(层叠样式表)的语法的一种扩充,诞生于2007年,最早也是最成熟的一款CSS预处理器语言,它可以使用变量.常量.嵌套.混 入.函数等功能,可以更有 ...
- git 学习 多个提交用同一个commit
git add .git commit --amend(连续按连个ZZ)git push -f origin ibm_branch(命令行可能不好用,用IDEA force push好用)
- Resque基本
原文:http://www.cnblogs.com/rywx/archive/2012/05/26/2519615.html Resque resque是基于redis的后台任务组件,能把任何类或模块 ...