#include<cmath>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<iostream>
#define REP(i,a,n)for(int i=a;i<=n;++i)
#define CLR(d,a)memset(d,a,sizeof(d)); using namespace std; void SetIO(string a){
string in=a+".in", out=a+".out";
freopen(in.c_str(),"r",stdin);
freopen(out.c_str(),"w",stdout);
} void End(){
fclose(stdin);
fclose(stdout);
} const int maxn=300000+4; int val[maxn]; int n,m; struct Queries{
int l,r,a,b;
Queries(int l=0,int r=0,int a=0,int b=0):l(l),r(r),a(a),b(b){}
}ask[maxn]; void Read(){
scanf("%d%d",&n,&m);
REP(i,1,n)scanf("%d",&val[i]);
REP(i,1,m){
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
ask[i]=Queries(a,b,c,d);
}
} int block, belong[maxn], A[maxn]; int get_belong(int i){ return (i-1)/block+1; } bool cmp(int i,int j){
if(belong[ask[i].l]==belong[ask[j].l]) return ask[i].r<ask[j].r;
return belong[ask[i].l]<belong[ask[j].l];
} void Build(){
block=sqrt(n);
REP(i,1,n) belong[i]=get_belong(i);
REP(i,1,m) A[i]=i;
sort(A+1,A+1+m,cmp);
} int count1[maxn]; struct BIT{
int C[2][maxn]; int lowbit(int t){return t&(-t);} void update(int pos,int o,int delta){
while(pos<=n){
C[o][pos]+=delta;
pos+=lowbit(pos);
}
} int query(int pos,int o){
int sum=0;
while(pos>0){
sum+=C[o][pos];
pos-=lowbit(pos);
}
return sum;
}
void Modify(int i,int delta){
if(i==0) return ;
update(i,0,delta);
count1[i]+=delta;
if(delta<0 && count1[i]==0) update(i,1,delta);
if(delta>0 && count1[i]==1) update(i,1,delta);
} }Tree; int ans1[maxn], ans2[maxn]; void Work(){
int l=1,r=1;
Tree.Modify(val[1],1);
REP(i,1,m){
int cur=A[i];
int l2=ask[cur].l;
int r2=ask[cur].r; if(r<r2) {
++r;
while(r<=r2){ Tree.Modify(val[r],1), ++r; }
--r;
}
else
while(r>r2) { Tree.Modify(val[r],-1), --r; } if(l<l2) {
while(l<l2){ Tree.Modify(val[l],-1); ++l; }
}
else {
--l;
while(l>=l2) { Tree.Modify(val[l],1), --l; }
++l;
} ans1[cur]=Tree.query(ask[cur].b,0)-Tree.query(ask[cur].a-1,0);
ans2[cur]=Tree.query(ask[cur].b,1)-Tree.query(ask[cur].a-1,1);
}
} void Print(){
REP(i,1,m)
printf("%d %d\n",ans1[i],ans2[i]);
} int main(){
SetIO("input");
Read();
Build();
Work();
Print();
End();
return 0;
}

[AHOI2013]作业 莫队 树状数组的更多相关文章

  1. BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块

    题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...

  2. COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)

    题目链接: COGS.BZOJ3236 Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以\(O(1)\)修改\(O(sqrt(n))\)查询.同BZOJ3809. 莫队为\(O(n^{1. ...

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

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

  4. bzoj3236 作业 莫队+树状数组

    莫队+树状数组 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...

  5. BZOJ 3236 AHOI 2013 作业 莫队+树状数组

    BZOJ 3236 AHOI 2013 作业 内存限制:512 MiB 时间限制:10000 ms 标准输入输出     题目类型:传统 评测方式:文本比较 题目大意: 此时己是凌晨两点,刚刚做了Co ...

  6. BZOJ_3289_Mato的文件管理_莫队+树状数组

    BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 .为了防止他人 ...

  7. bzoj 3289: Mato的文件管理 莫队+树状数组

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...

  8. 51nod 1290 Counting Diff Pairs | 莫队 树状数组

    51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[ ...

  9. 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)

    点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...

随机推荐

  1. ZBrush中Document特性介绍

    ZBrush®中的Document调色板用于加载或保存ZBrush文档,导入背景图像.导出背景图像.调整画布大小和设置背景颜色.本文小编来给大家介绍下Document常用的一些基本功能. ZBrush ...

  2. 大数据之R语言速成与实战

    什么是R语言? R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明.其词法和语法分别源自Scheme和S语言. R定义:一个能够自有有效的用于统计计算和绘图的 ...

  3. Spark 代码走读之 Cache

    Spark是基于内存的计算模型,但是当compute chain非常长或者某个计算代价非常大时,能将某些计算的结果进行缓存就显得很方便了.Spark提供了两种缓存的方法 Cache 和 checkPo ...

  4. 小程序--wepy省市区三级联动选择

    产品老哥对项目再一次进行关爱, 新增页面, 新增需求, 很完美........ 不多说, 记录一下新增东西中的省市区联动选择, (这里全国地区信息是在本地, 但不建议这么做, 因为js文件太大.. 建 ...

  5. HDU 2604 Queuing( 递推关系 + 矩阵快速幂 )

    链接:传送门 题意:一个队列是由字母 f 和 m 组成的,队列长度为 L,那么这个队列的排列数为 2^L 现在定义一个E-queue,即队列排列中是不含有 fmf or fff ,然后问长度为L的E- ...

  6. HDU 2256 Problem of Precision( 矩阵快速幂 )

    链接:传送门 题意:求式子的值,并向下取整 思路: 然后使用矩阵快速幂进行求解 balabala:这道题主要是怎么将目标公式进行化简,化简到一个可以使用现有知识进行解决的一个过程!菜的扣脚...... ...

  7. Hive学习:Hive连接JOIN用例详解

    1 准备数据: 1.1 t_1 01 张三 02 李四 03 王五 04 马六 05 小七 06 二狗 1.2 t_2 01 11 03 33 04 44 06 66 07 77 08 88 1.3 ...

  8. echarts如何更改表格主题颜色

    vue项目中,需要使用echarts时,需要根据UI设计图进行图标颜色修改 方法一: 1.在script中引入echarts以及主题样式: import echarts from 'echarts'; ...

  9. 如何使用JAVA请求HTTP

    package com.st.test; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...

  10. 2015 Multi-University Training Contest 7 hdu 5371 Hotaru's problem

    Hotaru's problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...