解题:AHOI 2013 作业
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 作业的更多相关文章
- BZOJ 3236 AHOI 2013 作业 莫队+树状数组
BZOJ 3236 AHOI 2013 作业 内存限制:512 MiB 时间限制:10000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目大意: 此时己是凌晨两点,刚刚做了Co ...
- BZOJ 3236 AHOI 2013 作业 莫队算法
题目大意:给出一些数,问在一个区间中不同的数值有多少种,和在一个区间中不同的数值有多少个. 思路:因为没有改动,所以就想到了莫队算法.然后我写了5K+的曼哈顿距离最小生成树,然后果断T了.(100s的 ...
- [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列
\(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...
- [BZOJ 3238] [AHOI 2013] 差异 【后缀数组 + 单调栈】
题目链接:BZOJ - 3238 题目分析 显然,这道题就是求任意两个后缀之间的LCP的和,这与后缀数组的联系十分明显. 求出后缀数组后,求出字典序相邻两个后缀的LCP,即 Height 数组. 那么 ...
- [AHOI 2013]差异
Description 题库链接 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \[\sum_{1\leqslant i< ...
- 【BZOJ 3238】【AHOI 2013】差异
http://www.lydsy.com/JudgeOnline/problem.php?id=3238 后缀数组裸题但是\(5\times 10^5\)貌似常数有点大就过不了?(我的sa常数那么大想 ...
- BZOJ3238:[AHOI 2013]差异
求一个字符串的∑ ∑ len[i] + len[j] - 2 * lcp(i, j),其中i,j表示从i,j开始的后缀. 方法一:SA+单调栈,自行yy. 方法二:SAM构造出来,然后每个状态对答案的 ...
- 【AHOI 2013】差异
Problem Description 给定一个长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \(\sum_{1\leqslant i&l ...
- COGS:1822. [AHOI2013]作业
1822. [AHOI 2013] 作业 ★★★ 输入文件:ahoi2013_homework.in 输出文件:ahoi2013_homework.out 简单对比时间限制:20 s ...
随机推荐
- youtube高清视频下载方法
youtube下载方法有多种, 但都不支持1080P以上的高清下载, 今天找到一种支持1080P的, 记录一下 步骤1: 百度搜: Dooseen tubedown 下载该软件, 并安装, 一直下一步 ...
- selenium 结合 docker 构建分布式测试环境 (初学者视角)
前言:随着自动化测试越学越深,深深觉得有太多的东西需要总结. 1.记录下学习中遇到的坑,当做学习笔记.2.有前人路过看到文章中比较落后的做法,请务必一定要指教.(因为是初学者视角,很多东西只是走通而已 ...
- Pairs Forming LCM LightOJ - 1236 素因子分解
Find the result of the following code: long long pairsFormLCM( int n ) { long long res = 0; fo ...
- Parcel 打包器简单使用记录
本文是构造 UI 轮子过程中搭建项目初始化时使用 Parcel 作为打包器的简要使用记录. 安装 参考 官方文档 使用 npm 进行 parcel-bundler 的安装. npm i -D parc ...
- 基于marathon-lb的服务自发现与负载均衡
参考文档: Marathon-lb介绍:https://docs.mesosphere.com/1.9/networking/marathon-lb/ 参考:http://www.cnblogs.co ...
- Tensorflow - Implement for a Softmax Regression Model on MNIST.
Coding according to TensorFlow 官方文档中文版 import tensorflow as tf from tensorflow.examples.tutorials.mn ...
- Js 问题分析--js 影响页面性能
文档下载链接:http://pan.baidu.com/s/1i4Hci4d (失效请留言)
- php序列化问题
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...
- scrum立会报告+燃尽图(第三周第七次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2286 项目地址:https://coding.net/u/wuyy694 ...
- Beta阶段第2周/共2周 Scrum立会报告+燃尽图 04
此作业要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2412 版本控制地址 [https://git.coding.net/ ...