Bzoj 3236: [Ahoi2013]作业 莫队,分块
3236: [Ahoi2013]作业
Time Limit: 100 Sec Memory Limit: 512 MB
Submit: 1113 Solved: 428
[Submit][Status][Discuss]
Description
.jpg)
Input

Output

Sample Input
1 2 2
1 2 1 3
1 2 1 1
1 3 1 3
2 3 2 3
Sample Output
1 1
3 2
2 1
HINT
N=100000,M=1000000
Source
题解:
莫队+分块乱搞。
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010
#define MAXM 1000010
int block,sum[MAXN],tot[MAXN],num[],color[MAXN],pos[MAXN],ans1[MAXM],ans2[MAXM];
struct node
{
int l,r,a,b,id;
}q[MAXM];
int read()
{
int s=,fh=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')fh=-;ch=getchar();}
while(ch>=''&&ch<=''){s=s*+(ch-'');ch=getchar();}
return s*fh;
}
bool cmp(node aa,node bb)
{
if(pos[aa.l]==pos[bb.l])return aa.r<bb.r;
return aa.l<bb.l;
}
void Del(int C)
{
int cc=pos[C];
sum[cc]--;tot[C]--;
if(tot[C]==)num[cc]--;
}
void Add(int C)
{
int cc=pos[C];
sum[cc]++;tot[C]++;
if(tot[C]==)num[cc]++;
}
int getans1(int aa,int bb)
{
int p1=pos[aa],p2=pos[bb],gs=,i;
if(p1==p2)
{
for(i=aa;i<=bb;i++)gs+=tot[i];
return gs;
}
for(i=aa;i<=p1*block;i++)gs+=tot[i];
for(i=p1+;i<=p2-;i++)gs+=sum[i];
for(i=(p2-)*block+;i<=bb;i++)gs+=tot[i];
return gs;
}
int getans2(int aa,int bb)
{
int p1=pos[aa],p2=pos[bb],gs=,i;
if(p1==p2)
{
for(i=aa;i<=bb;i++)if(tot[i]!=)gs++;
return gs;
}
for(i=aa;i<=p1*block;i++)if(tot[i]!=)gs++;
for(i=p1+;i<=p2-;i++)gs+=num[i];
for(i=(p2-)*block+;i<=bb;i++)if(tot[i]!=)gs++;
return gs;
}
int write(int k)
{
if(k<){putchar('-');k=-k;}
if(k>)write(k/);
putchar(k%+'');
}
int main()
{
int n,m,i,L,R;
n=read();m=read();
block=(int)sqrt(n);
for(i=;i<=n;i++)color[i]=read(),pos[i]=(i-)/block+;
//block=(int)sqrt(n);
for(i=;i<=m;i++)q[i].l=read(),q[i].r=read(),q[i].a=read(),q[i].b=read(),q[i].id=i;
//for(i=1;i<=n;i++)pos[i]=(i-1)/block+1;
sort(q+,q+m+,cmp);
L=;R=;
//memset(tot,0,sizeof(tot));//当前枚举的区间中每种颜色的个数.
//memset(sum,0,sizeof(sum));//每一块的总共的数量.
//memset(num,0,sizeof(num));//每一块的颜色的数量.
for(i=;i<=m;i++)
{
while(L<q[i].l)
{
Del(color[L]);
L++;
}
while(L>q[i].l)
{
L--;
Add(color[L]);
}
while(R<q[i].r)
{
R++;
Add(color[R]);
}
while(R>q[i].r)
{
Del(color[R]);
R--;
}
ans1[q[i].id]=getans1(q[i].a,q[i].b);
ans2[q[i].id]=getans2(q[i].a,q[i].b);
}
for(i=;i<=m;i++){write(ans1[i]);putchar(' ');write(ans2[i]);putchar('\n');}//printf("%d %d\n",ans1[i],ans2[i]);
return ;
}
Bzoj 3236: [Ahoi2013]作业 莫队,分块的更多相关文章
- BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )
莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢... ----------------------------------------------- ...
- BZOJ 3236: [Ahoi2013]作业(莫队+树状数组)
传送门 解题思路 莫队+树状数组.把求\([a,b]\)搞成前缀和形式,剩下的比较裸吧,用\(cnt\)记一下数字出现次数.时间复杂度\(O(msqrt(n)log(n)\),莫名其妙过了. 代码 # ...
- [AHOI2013]作业 (莫队+分块)
[AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小 ...
- bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)
题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...
- BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]
题意: 询问区间权值在$[a,b]$范围内种类数和个数 莫队 权值分块维护种类数和个数$O(1)-O(\sqrt{N})$ #include <iostream> #include < ...
- bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...
- BZOJ3236:[AHOI2013]作业(莫队,分块)
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 ...
- [BZOJ 3236] [Ahoi2013] 作业 && [BZOJ 3809] 【莫队(+分块)】
题目链接: BZOJ - 3236 BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...
- 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 ...
随机推荐
- 【CODECHEF】【phollard rho + miller_rabin】The First Cube
All submissions for this problem are available. Read problems statements in Mandarin Chinese and Rus ...
- 7种基本排序算法的Java实现
7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 /** * 直接插 ...
- ADO.NET学习小结【1】正在更新...
小弟正在学习ADO.net有误的地方还请大大们批评指出,小弟在此谢过了 一.ADO.net简述: 以前我们写程序尤其是写和数据库有关的应用程序时,你我都得要了解Microsoft ADO COM对象才 ...
- 2014年度辛星html教程夏季版第二节
上面一节中我们介绍了HTML文件的书写和几个标签,接下来我们来认识几个其他的标签,这里我们主要介绍一下head标签和文本标签. ***************head标签*************** ...
- 让IIS识别PUT和DELETE请求
转眼间年底了,突然的我就挪了窝.新的公司,新的电脑,新的服务器....面对新环境,手有些痒,于是试着编写自己的简易版restful API. restful的话,对资源的相应操作应该被体现成http动 ...
- cocos2d-x学习知识点记录
环境搭建 http://4137613.blog.51cto.com/4127613/751149 Cocos2d-x初探,HelloWorld解读 http://www.cnblogs.com/Ke ...
- 可以用来开发h5的软件小结
webStorm phoneGap notepad++ eclips text sublime dreamWeaver intellij idea 学习h5 需要掌握的 大块的知识 xhtml ja ...
- HTML5之本地文件系统API - File System API
HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...
- Servlet高级应用---Servlet与缓存
一]设置缓存文件的有效日期 重点方法: HttpServletRequest类: 1>String getRequest ...
- USB数据线上的“疙瘩”:原来有这么大用处!
在不少键盘.鼠标或是游戏外设的数据线末端我们都能见到一小段金属圆环.虽然这算得上是习以为常的一个设计,但如果说到其具体作用的话很多人一下子还真回答不上来.反正笔者在这里先可以告诉大家,这货肯定不是简简 ...