解题: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 ...
随机推荐
- 自动化之UI(autoit)
自动化 说到自动化,我真的很不喜欢UI这层去做实践.前置条件要求比较严谨,如果不满足特定的前置条件,那么成本实在太大了. 投入与产出差过大,效果打折扣.从互联网来说,UI自动化是入门门槛很低的一种实践 ...
- gtest命令行测试案例
使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便.同时,gtest也为我们提供了一系列的运行参数(环境变量.命令行参数或代码里指定),使得我们可以对案例的执行进行一些有效的 ...
- curl常用用法
-v显示请求详细信息 curl www.baidu.com -v -X 指定请求方式 GET请求 curl -X GET http://localhost:8080/search?data=123 # ...
- python 标准日志模块loging 及日志系统实例
本文出处:https://www.cnblogs.com/goodhacker/p/3355660.html#undefined python的标准库里的日志系统从Python2.3开始支持.只要im ...
- 九个很有用的php功能
1. 函数的任意数目的参数 你可能知道PHP允许你定义一个默认参数的函数.但你可能并不知道PHP还允许你定义一个完全任意的参数的函数 下面是一个示例向你展示了默认参数的函数: 1 2 3 4 5 6 ...
- c# 消息机制
1.windows系统是一个消息驱动的系统,windows本身有自己的消息队列. 系统传递消息给应用程序. 应用程序的消息机制:应用程序的执行是通过消息驱动的.消息是整个应用程序的工作引擎. 2.c# ...
- 第十一次作业 - Alpha 事后诸葛亮(团队)
软工 · 第十一次作业 - Alpha 事后诸葛亮(团队) 组长本次作业链接 现代软件工程 项目Postmortem 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场 ...
- hdu 1241--入门DFS
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- 周总结web未完成的代码
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...
- equals()和hashcode()详解
转载自http://www.cnblogs.com/Qian123/p/5703507.html java.lang.Object类中有两个非常重要的方法: public boolean equa ...