首页 > TAG信息列表 > DQUERY

SP3267 DQUERY - D-query

题目大意: 给出一个长度为n 的数列,\(a_{1},a_{2},...,a_{n}\),有q 个询问,每个询问给出数对 \((i,j)\),需要你给出 \(a_{i},a_{i+1} ,...,a_j\) 这一段中有多少不同的数字 分析: 考虑到树状数组对于处理前缀和问题很方便,自然,尝试用树状数组来进行处理。设 \(tree[i]\) 表示前 \(i\) 个

SPOJ-DQUERY D-query

D-query 区间内,有多少个不同的数 莫队 模板题 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; #define endl '\n' const int maxn = 3e4 + 10; const int maxm = 2e5 + 10; int cnt[1000010], num[m

SPOJ DQUERY - D-query (树状数组求区间种类数)

https://www.spoj.com/problems/DQUERY/ 求区间种类数 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 1000000; const int MAXM = 30010; struct Q{ int l, r, id; }ask[MAXN]; int c[MAXN + 10], a[MAXM], last[MAXN + 10]; voi

SPOJ 3267 DQUERY - D-query

题目大意 对于一个数列 \(\left\{a_n\right\}\) , 有 \(q\) 次询问,第 \(i\) 次询问格式为 \(l_i,r_i\) , 求 \(a_{l_i},a_{l_i + 1},a_{l_i + 2},\dots,a_{r_i}\) 中有多少不同的数。 其中, \(1 \leq n \leq 3 \times 10^4\) , \(1 \leq q \leq 2 \times 10^5\) , \(1 \leq a_i \l

题解 SP3267 【DQUERY - D-query】

题目描述: 给出一串长度为 \(n\) 的序列,有 \(q\) 个询问,每次询问给数对 \((i,j)\),求区间 \([i,j]\) 中有多少个不同的数字 这题我是用莫队过的; 众所周知,莫队是一个暴力毒瘤玄学很方便的算法(不套其他的数据结构),可以乱搞很多的区间问题。 p.s.我是通过这篇博客来自学的,如果有理解不

SP3267 DQUERY - D-query(离线树状数组)

给你一个序列,询问一个区间内有多少个不同的数字。 经典离线树状数组,类似于HH(憨憨)的项链,把询问按照右端点排序,保证在每个数字最后一次出现的位置上加1 如果有询问的右端点等于当前加到的数字下标,就对它求一次和并累加进答案,直到所有的查询都被处理。 代码: #include <bits/stdc++.h

SPOJ - DQUERY (主席树求区间不同数的个数)

题目链接:https://vjudge.net/problem/SPOJ-DQUERY 题目大意:给定一个含有n个数的序列,有q个询问,每次询问区间[l,r]中不同数的个数。   解题思路:从左向右一个一个将该数字处在的位置添加到主席树中 如果该数字前面未出现过,则在此版本的线段树中的该条链加1,如果该数字已经出现过了,则在

SP3267 DQUERY - D-query(普通莫队)

题目 洛谷题目 题解 莫队板子题 普通莫队的操作 将询问排序 定义L,R指针跳到询问区间 排序方式 将整个区间分为不同块,块长为nm\frac{n}{\sqrt{m}}m​n​有的大佬说是n\sqrt{n}n​但是推一下就知道nm\frac{n}{\sqrt{m}}m​n​更合理 指针跳动 这个应该很好理解吧 跳动