BZOJ 3809Gty的二逼妹子序列 解题报告+data marker
--BZOJ
http://www.lydsy.com/JudgeOnline/problem.php?id=3809
考虑对l,r跑莫队,对一组维护美丽度出现次数的桶修改,
然后把桶序列用分块维护查询
然后是吐槽:
内存28M,哦,这个题居然卡内存。。。。。
卡内存!!!
然后我就为本校的权限号贡献了三次MLE......
代码:
- #include<cstdio>
- #include<cmath>
- #include<algorithm>
- using std::sort;
- struct ss{
- int l,r,a,b,num;
- }x[];
- int n,m,cut;
- int tong[];
- int id[];
- int mark[];
- int a[];
- int ans[];
- bool cmp(ss a,ss b){
- if(id[a.l]==id[b.l])
- return a.r<b.r;
- return id[a.l]<id[b.l];
- }
- inline void in(int &ans)
- {
- ans=;bool p=false;char ch=getchar();
- while((ch>'' || ch<'')&&ch!='-') ch=getchar();
- if(ch=='-') p=true,ch=getchar();
- while(ch<=''&&ch>='') ans=ans*+ch-'',ch=getchar();
- if(p) ans=-ans;
- }
- void modui();
- int fin_brick(int l,int r);
- int main()
- {
- int i,j,k;
- in(n),in(m);
- cut=(int)sqrt(n);
- if(cut*cut<n)cut++;
- for(i=;i<=n;i++)
- in(a[i]);
- for(i=;i<=m;i++)
- in(x[i].l),in(x[i].r),in(x[i].a),in(x[i].b),x[i].num=i;
- for(i=;i<=n;i++)
- id[i]=i/cut;
- sort(x+,x+m+,cmp);
- modui();
- for(i=;i<=m;i++)
- printf("%d\n",ans[i]);
- return ;
- }
- void modui(){
- int l_p=x[].l,r_p=x[].l-,i;
- for(i=;i<=m;i++){
- while(r_p<x[i].r){
- r_p++;
- if(!tong[a[r_p]])
- mark[a[r_p]/cut]++;
- tong[a[r_p]]++;
- }
- while(r_p>x[i].r){
- tong[a[r_p]]--;
- if(!tong[a[r_p]])
- mark[a[r_p]/cut]--;
- r_p--;
- }
- while(l_p>x[i].l){
- l_p--;
- if(!tong[a[l_p]])
- mark[a[l_p]/cut]++;
- tong[a[l_p]]++;
- }
- while(l_p<x[i].l){
- tong[a[l_p]]--;
- if(!tong[a[l_p]])
- mark[a[l_p]/cut]--;
- l_p++;
- }
- ans[x[i].num]=fin_brick(x[i].a,x[i].b);
- }
- }
- int fin_brick(int l,int r){
- int b_l=l/cut,b_r=r/cut,ll=l%cut,rr=r%cut;
- int i,j,ans=;
- if(b_l==b_r){
- for(i=l;i<=r;i++)
- if(tong[i])
- ans++;
- return ans;
- }
- for(i=ll,j=l;i<=cut-;i++,j++)
- if(tong[j])
- ans++;
- for(i=rr,j=r;i>=;i--,j--)
- if(tong[j])
- ans++;
- b_l++;b_r--;
- for(i=b_l;i<=b_r;i++)
- ans+=mark[i];
- return ans;
- }
- #include<cstdio>
- #include<cstdlib>
- #include<ctime>
- using namespace std;
- int main()
- {
- srand(time());
- int n=,m=;
- int i;
- printf("%d %d\n",n,m);
- for(i=;i<=n;i++)
- printf("%d ",rand()%n+);
- printf("\n");
- for(i=;i<=m;i++){
- int l=rand()%n+,a=rand()%n+;
- int r=l+rand()%(n-l+),b=a+rand()%(n-a+);
- printf("%d %d %d %d\n",l,r,a,b);
- }
- }
data_maker
祝AC
BZOJ 3809Gty的二逼妹子序列 解题报告+data marker的更多相关文章
- BZOJ 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1387 Solved: 400[Submit][Status][Di ...
- Bzoj 3809: Gty的二逼妹子序列 莫队,分块
3809: Gty的二逼妹子序列 Time Limit: 35 Sec Memory Limit: 28 MBSubmit: 868 Solved: 234[Submit][Status][Dis ...
- 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1728 Solved: 513 Description Autumn ...
- [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业 bzoj bzoj 题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类. ...
- 【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1072 Solved: 292[Submit][Status][Di ...
- BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块
BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...
- 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 链接 分析: 和这道AHOI2013 作业差不多.权值是1~n的,所以对权值进行分块.$O(1)$修改,$O(\sqrt n)$查询. 代码: #include< ...
- 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块
[BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...
- [AHOI2013]作业 & Gty的二逼妹子序列 莫队
---题面--- 题解: 题目要求统计一个区间内数值在[a, b]内的数的个数和种数,而这个是可以用树状数组统计出来的,所以可以考虑莫队. 考虑区间[l, r]转移到[l, r + 1],那么对于维护 ...
随机推荐
- QuantLib 金融计算——数学工具之求解器
目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. Q ...
- windows安装tesseract-OCR及使用
tesseract是Python的一个OCR(光学字符识别)库 首先下载tesseract的exe安装文件 https://github.com/UB-Mannheim/tesseract/wik ...
- pycharm+gitee
Git操作 前言: 由于各种原因,很多时候我们写代码的电脑并不会随身携带,所以有的时候突发灵感想继续写代码就变得难以实现.相信大部分同学对此都有了解,那就通过代码托管平台来管理.原本想用GitHub来 ...
- python全栈开发_day15_模块学习
一:模块 1)什么是模块 每一个py文件就是一个模块 导入模块,会编译执行 1.形成一个对应的pyc文件 2.产生该模块自己的店全局名称空间 3.在使用该模块的全局名称空间中产生一个名字(导入的模块名 ...
- spring boot快速入门 9: 单元测试
进行单元测试: service第一种方式: 第一步:在指定service中创建一个方法进行测试 /** * 通过ID查询一个女生的信息 * @param id * @return */ public ...
- JVM-ClassLoader类加载器
类加载器: 对于虚拟机的角度来看,只存在两种类加载器: 启动类加载器(Brootstrap ClassLoader)和“其他类加载器”.启动类加载器是由C++写的,属于虚拟机的一部分,其他类加载器都是 ...
- WPF设置动画在控件载入时就立刻执行
<YourControl.Triggers> <EventTrigger RoutedEvent="YourControl.Loaded"><!--这 ...
- 剑指offer(11-20)编程题
二进制中1的个数 数值的整数次方 调整数组顺序使奇数位于偶数前面 链表中倒数第k个结点 反转链表 合并两个排序的链表 树的子结构 二叉树的镜像 顺时针打印矩阵 包含min函数的栈 11.输入一个整数, ...
- Java reflect 反射 1
1 反射的概述 反射含义:可以获取正在运行的Java对象. JAVA反射机制是在运行状态中,对于任意一个类,都能够得到这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法; 这种动态 ...
- Nginx教程(6) 负载均衡
一原理 二例子 在 nginx-1.13.0.tar.gz下测试 upstream test { server 192.168.56.90:8180 weight=1 max_fails=3 fail ...