题面

emmm......我把莫队扔到了杂题里,因为感觉局限挺大的=。=

这题是莫队维护信息+分块查询答案,都是两者的基本操作,复杂度$O(m$ $sqrt(n)+n$ $sqrt(m))$

所以为啥要写这水题的题解来着

 #include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=,Sq=;
struct a
{
long long ans,num;
int l,r,xx,yy,v,id;
}mo[N];
int b[N],blo[N],cnt[N],exi[Sq],bkt[Sq],pts[Sq][];
int n,m,t1,t2,t3,t4,lp,rp,sqr,srt,xnt,maxx;
bool cmp(a x,a y)
{
return x.v==y.v?x.r<y.r:x.v<y.v;
}
bool com(a x,a y)
{
return x.id<y.id;
}
void change(int val,int typ)
{
if(typ)
{
bkt[blo[val]]++;
exi[blo[val]]+=(++cnt[val]==);
}
else
{
bkt[blo[val]]--;
exi[blo[val]]-=(!(--cnt[val]));
}
}
int query1(int x,int y)
{
int ret=;
if(blo[x]!=blo[y])
{
for(int i=x;i<=pts[blo[x]][];i++) ret+=cnt[i];
for(int i=pts[blo[y]][];i<=y;i++) ret+=cnt[i];
for(int i=blo[x]+;i<=blo[y]-;i++) ret+=bkt[i];
}
else for(int i=x;i<=y;i++) ret+=cnt[i];
return ret;
}
int query2(int x,int y)
{
int ret=;
if(blo[x]!=blo[y])
{
for(int i=x;i<=pts[blo[x]][];i++) ret+=(cnt[i]>);
for(int i=pts[blo[y]][];i<=y;i++) ret+=(cnt[i]>);
for(int i=blo[x]+;i<=blo[y]-;i++) ret+=exi[i];
}
else for(int i=x;i<=y;i++) ret+=(cnt[i]>);
return ret;
}
int main ()
{
scanf("%d%d",&n,&m),sqr=sqrt(n);
for(int i=;i<=n;i++)
scanf("%d",&b[i]),maxx=max(maxx,b[i]);
for(int i=;i<=m;i++)
{
scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
mo[i].v=(t1-)/sqr+,mo[i].id=i,maxx=max(maxx,t4);
mo[i].l=t1,mo[i].r=t2,mo[i].xx=t3,mo[i].yy=t4;
}
pts[xnt=][]=,srt=sqrt(maxx);
for(int i=;i<=n;i++)
{
blo[i]=(i-)/srt+;
if(i%srt==)
{
pts[xnt++][]=i;
pts[xnt][]=i+;
}
}
pts[xnt][]=maxx,lp=;
sort(mo+,mo++m,cmp);
for(int i=;i<=m;i++)
{
while(lp<mo[i].l) change(b[lp++],);
while(lp>mo[i].l) change(b[--lp],);
while(rp<mo[i].r) change(b[++rp],);
while(rp>mo[i].r) change(b[rp--],);
mo[i].ans=query1(mo[i].xx,mo[i].yy);
mo[i].num=query2(mo[i].xx,mo[i].yy);
}
sort(mo+,mo++m,com);
for(int i=;i<=m;i++)
printf("%lld %lld\n",mo[i].ans,mo[i].num);
return ;
}

解题:AHOI 2013 作业的更多相关文章

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

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

  2. BZOJ 3236 AHOI 2013 作业 莫队算法

    题目大意:给出一些数,问在一个区间中不同的数值有多少种,和在一个区间中不同的数值有多少个. 思路:因为没有改动,所以就想到了莫队算法.然后我写了5K+的曼哈顿距离最小生成树,然后果断T了.(100s的 ...

  3. [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列

    \(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...

  4. [BZOJ 3238] [AHOI 2013] 差异 【后缀数组 + 单调栈】

    题目链接:BZOJ - 3238 题目分析 显然,这道题就是求任意两个后缀之间的LCP的和,这与后缀数组的联系十分明显. 求出后缀数组后,求出字典序相邻两个后缀的LCP,即 Height 数组. 那么 ...

  5. [AHOI 2013]差异

    Description 题库链接 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \[\sum_{1\leqslant i< ...

  6. 【BZOJ 3238】【AHOI 2013】差异

    http://www.lydsy.com/JudgeOnline/problem.php?id=3238 后缀数组裸题但是\(5\times 10^5\)貌似常数有点大就过不了?(我的sa常数那么大想 ...

  7. BZOJ3238:[AHOI 2013]差异

    求一个字符串的∑ ∑ len[i] + len[j] - 2 * lcp(i, j),其中i,j表示从i,j开始的后缀. 方法一:SA+单调栈,自行yy. 方法二:SAM构造出来,然后每个状态对答案的 ...

  8. 【AHOI 2013】差异

    Problem Description 给定一个长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \(\sum_{1\leqslant i&l ...

  9. COGS:1822. [AHOI2013]作业

    1822. [AHOI 2013] 作业 ★★★   输入文件:ahoi2013_homework.in   输出文件:ahoi2013_homework.out   简单对比时间限制:20 s   ...

随机推荐

  1. Windows下使用Python的Curses库时 No module named _curses问题

    这个问题产生的 根本原因 是 curses 库不支持 windows.所以我们在下载完成python后(python 是自带 curses 库的),虽然在  python目录\Lib  中可以看到 c ...

  2. python装饰器简单使用

    装饰器和闭包关联很大,要先明白闭包是什么 原始代码: def foo(): print('fcc') 增加装饰器 from time import ctime,sleep def w(fcc): de ...

  3. Charles的安装与破解

    Charles启动需要安装java环境,不知配置了jdk就可以,而是需要java环境,否则下载后点击启动会提示找不到suitable java 1 安装java环境 安装java环境是在https:/ ...

  4. Phaser3游戏三角学应用--一只跟随屏幕点击位置游动的鱼

    fish fish 资源图: fish-136x80.png undersea-bg.png 代码 var config = { type: Phaser.AUTO, parent: 'iFiero' ...

  5. jquery on函数和prop与attr区别

    一.jquery on()方法 1.语法 2.例子 $(document).ready(function(){ $("p").on("click",functi ...

  6. FIsherman丶Team

    小组成员:郝恒杰,洪佳兴,张子祥 组长:郝恒杰 项目:Fisher Job(渔夫兼职) 简介: 我们的产品渔夫兼职是为了解决大学生兼职群体 的痛苦,他们需要一个好的渠道去找一个让自己满意的兼职,但是现 ...

  7. ASP.NET MVC5 学习系列之模型绑定

    一.理解 Model Binding Model Binding(模型绑定) 是 HTTP 请求和 Action 方法之间的桥梁,它根据 Action 方法中的 Model 类型创建 .NET 对象, ...

  8. 【数位dp】Enigma

    http://codeforces.com/gym/101889 E 与一般数位dp不同,保存的是能否满足条件,而非记录方案数 代码: #include <iostream> #inclu ...

  9. HDU 1121 Complete the Sequence 差分

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1121 Complete the Sequence Time Limit: 3000/1000 MS ...

  10. Python数据挖掘学习路程--起步

    一.首先第一步我去了解了Python开发环境:Python(程序运行基础的解释器)+第三方类库(功能扩展)+编辑器(提高代码编辑效率) 编辑器有:Pycharm.Spyder.jupyter note ...