莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢...

-------------------------------------------------------------------------

#include<bits/stdc++.h>
 
using namespace std;
 
#define lowbit(x) ((x) & -(x))
 
const int maxn = 100009;
const int maxm = 1000009;
 
int N, M, block[maxn], seq[maxn], ans[maxm][2], L, R;
 
inline int read() {
int ans = 0;
char c = getchar();
for(; !isdigit(c); c = getchar());
for(; isdigit(c); c = getchar())
   ans = ans * 10 + c - '0';
return ans;
}
 
int buf[12];
inline void write(int x) {
if(!x) {
putchar('0');
return;
}
int n = 0;
for(; x; x /= 10) buf[n++] = x % 10;
while(n--) putchar(buf[n] + '0');
}
 
struct BIT {
int b[maxn];
BIT() {
memset(b, 0, sizeof b);
}
inline void update(int x, int v) {
for(; x <= N; x += lowbit(x)) b[x] += v;
}
inline int sum(int x) {
int ret = 0;
for(; x; x -= lowbit(x)) ret += b[x];
return ret;
}
inline int query(int l, int r) {
return sum(r) - sum(l - 1);
}
} cnt, exist;
 
struct Q {
int l, r, a, b, p;
inline void Read(int t) {
l = read() - 1; r = read() - 1;
a = read(); b = read();
p = t;
}
bool operator < (const Q &o) const {
return block[l] < block[o.l] || (block[l] == block[o.l] && r < o.r);
}
} A[maxm];
 
void init() {
N = read(); M = read();
for(int i = 0; i < N; i++) seq[i] = read();
int blocks = (int) sqrt(N);
for(int i = 0; i < N; i++) block[i] = i / blocks;
for(int i = 0; i < M; i++) A[i].Read(i);
}
 
void work(int x) {
Q* c = A + x;
for(; L < c->l; L++) {
cnt.update(seq[L], -1);
if(!cnt.query(seq[L], seq[L])) exist.update(seq[L], -1);
}
while(L > c->l) {
L--;
if(!cnt.query(seq[L], seq[L])) exist.update(seq[L], 1);
cnt.update(seq[L], 1);
}
for(; R > c->r; R--) {
cnt.update(seq[R], -1);
if(!cnt.query(seq[R], seq[R])) exist.update(seq[R], -1);
}
while(R < c->r) {
R++;
if(!cnt.query(seq[R], seq[R])) exist.update(seq[R], 1);
cnt.update(seq[R], 1);
}
ans[c->p][0] = cnt.query(c->a, c->b);
ans[c->p][1] = exist.query(c->a, c->b);
}
 
int main() {
init();
sort(A, A + M);
cnt.update(seq[L = R = 0], 1);
exist.update(seq[0], 1);
for(int i = 0; i < M; i++) work(i);
for(int i = 0; i < M; i++) {
write(ans[i][0]);
putchar(' ');
write(ans[i][1]);
putchar('\n');
}
return 0;
}

-------------------------------------------------------------------------

3236: [Ahoi2013]作业

Time Limit: 100 Sec  Memory Limit: 512 MB
Submit: 899  Solved: 345
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

3 4
1 2 2
1 2 1 3
1 2 1 1
1 3 1 3
2 3 2 3

Sample Output

2 2
1 1
3 2
2 1

HINT

N=100000,M=1000000

Source

BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )的更多相关文章

  1. Bzoj 3236: [Ahoi2013]作业 莫队,分块

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1113  Solved: 428[Submit][Status ...

  2. BZOJ 3236: [Ahoi2013]作业(莫队+树状数组)

    传送门 解题思路 莫队+树状数组.把求\([a,b]\)搞成前缀和形式,剩下的比较裸吧,用\(cnt\)记一下数字出现次数.时间复杂度\(O(msqrt(n)log(n)\),莫名其妙过了. 代码 # ...

  3. BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]

    题意: 询问区间权值在$[a,b]$范围内种类数和个数 莫队 权值分块维护种类数和个数$O(1)-O(\sqrt{N})$ #include <iostream> #include < ...

  4. [AHOI2013]作业 (莫队+分块)

    [AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小 ...

  5. BZOJ 3236: [Ahoi2013]作业

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1393  Solved: 562[Submit][Status ...

  6. bzoj 3236: [Ahoi2013]作业(缺线段树)

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1744  Solved: 702[Submit][Status ...

  7. [BZOJ 3236] [Ahoi2013] 作业 && [BZOJ 3809] 【莫队(+分块)】

    题目链接: BZOJ - 3236   BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...

  8. bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)

    题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...

  9. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

    [BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...

随机推荐

  1. 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)

    申明:此文为转载(非原创),文章分析十分透彻,已添加原文链接,如有任何侵权问题,请告知,我会立即删除. 第1章 引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大 ...

  2. win7下文件名不能定义为con(任何文件格式)

    从linux传输压缩包到win7下解压缩,总是提示出错,可是在linux下解压都很正常,于是定位出错的文件,发现是con.c和con.h文件,经排查,原因如下: CON是DOS下的特殊设备名 如下由系 ...

  3. JS 引用

    var arr1=[1,2,3,4]; var arr2=arr1; arr2.push(5); console.log(arr1);//和arr2一样 console.log(arr1==arr2) ...

  4. JQuery 限制文本框只能输入数字和小数点

    $(function(){ /*JQuery 限制文本框只能输入数字*/ $(".NumText").keyup(function(){ $(this).val($(this).v ...

  5. 如何管理安卓android手机下google(谷歌)的通讯录联系人账户

    andorid手机都自带通讯录备份功能,但是如何管理,一直是一些人头疼的问题.经常在手机备份还原之后发现很多联系人都有重复. 1.打开 :https://mail.google.com/ 用你的谷歌账 ...

  6. Microsoft Accelerator for Windows Azure Alum Azuqua 今天启动

     云最大的一个优势就是,它使开发人员比以往任何时候都更迅速.更灵活.在 Windows Azure 中开发应用程序时,工程师无需考虑架设服务器.规划容量或进行日常维护.相反,他们可以专注于提出假设 ...

  7. BZOJ 1089 严格n元树 (递推+高精度)

    题解:用a[i]表<=i时有几种树满足度数要求,那么这样就可以递归了,a[i]=a[i-1]^n+1.n个节点每个有a[i-1]种情况,那么将其相乘,最后加上1,因为深度为0也算一种.那么答案就 ...

  8. java循环HashMap两种方法的效率比较

    一.循环HashMap的两种方式 方式1: Iterator<Entry<String, String>> entryKeyIterator = entrySetMap.ent ...

  9. PhoneGap 开发笔记

    1 调死调活都调不出来的情况下,可以考虑更换下phoneGap 版本,尽量用比较新的版本. 2 form submit 会返回 3 jquery mobile 的4个初始化事件 第一个触发的事件是mo ...

  10. How to access the properties of an object in Javascript

    Javascript has three different kinds of properties: named data property, named accessor property and ...