Bzoj 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset
2453: 维护队列
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 578 Solved: 247
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
2 3
1 2
Q 1 2
R 1 2
Q 1 2
Sample Output
1
HINT
对于100%的数据,有1 ≤ N ≤ 10000, 1 ≤ M ≤ 10000,小朋友A不会修改超过1000次,所有颜色均用1到10^6的整数表示。
Source
2011福建集训
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define MAXN 10010 4 #define MAXM 1000010 5 int n,a[MAXN],last[MAXN],pre[MAXM],block,pos[MAXN],h[MAXN]; 6 int read() 7 { 8 int s=0,fh=1;char ch=getchar(); 9 while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();} 10 while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();} 11 return s*fh; 12 } 13 void cl(int k) 14 { 15 int l=(k-1)*block+1,r=min(n,k*block),i; 16 for(i=l;i<=r;i++)a[i]=last[i]; 17 sort(a+l,a+r+1); 18 } 19 void Change(int x,int c) 20 { 21 int i,t; 22 for(i=1;i<=n;i++)pre[h[i]]=0; 23 h[x]=c; 24 for(i=1;i<=n;i++) 25 { 26 t=last[i]; 27 last[i]=pre[h[i]]; 28 if(t!=last[i])cl(pos[i]); 29 pre[h[i]]=i; 30 } 31 } 32 int Find(int k,int ll) 33 { 34 int l=(k-1)*block+1,r=min(k*block,n),mid,t=0; 35 while(l<=r) 36 { 37 mid=(l+r)/2; 38 if(a[mid]>=ll)r=mid-1; 39 else if(a[mid]<ll)t=mid,l=mid+1; 40 } 41 if(t==0)return 0; 42 else return t-((k-1)*block+1)+1; 43 } 44 int Query(int l,int r) 45 { 46 int ans=0,i; 47 if(pos[l]==pos[r]) 48 { 49 for(i=l;i<=r;i++)if(last[i]<l)ans++; 50 } 51 else 52 { 53 for(i=l;i<=pos[l]*block;i++)if(last[i]<l)ans++; 54 for(i=(pos[r]-1)*block+1;i<=r;i++)if(last[i]<l)ans++; 55 for(i=pos[l]+1;i<=pos[r]-1;i++)ans+=Find(i,l); 56 } 57 return ans; 58 } 59 int main() 60 { 61 int M,i,m,s1,s2; 62 char fh[2]; 63 n=read();M=read(); 64 block=(int)sqrt(n); 65 memset(last,0,sizeof(last)); 66 memset(pre,0,sizeof(pre)); 67 for(i=1;i<=n;i++) 68 { 69 h[i]=read(); 70 last[i]=pre[h[i]]; 71 pre[h[i]]=i; 72 pos[i]=(i-1)/block+1; 73 } 74 if(block*block==n)m=n/block; 75 else m=n/block+1; 76 for(i=1;i<=m;i++)cl(i); 77 for(i=1;i<=M;i++) 78 { 79 scanf("\n%s",fh);s1=read();s2=read(); 80 if(fh[0]=='Q') 81 { 82 printf("%d\n",Query(s1,s2)); 83 } 84 else Change(s1,s2); 85 } 86 return 0; 87 }
View Code
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[10010]; 4 bitset<1000010> vis; 5 int main() 6 { 7 int n,m,i,l,r,sum,j; 8 char fh; 9 scanf("%d %d",&n,&m); 10 for(i=1;i<=n;i++)scanf("%d",&a[i]); 11 for(i=1;i<=m;i++) 12 { 13 scanf("\n%c %d %d",&fh,&l,&r); 14 if(fh=='Q') 15 { 16 vis.reset(); 17 sum=0; 18 for(j=l;j<=r;j++)if(vis[a[j]]==0){sum++;vis[a[j]]=1;} 19 printf("%d\n",sum); 20 } 21 else 22 { 23 a[l]=r; 24 } 25 } 26 return 0; 27 }
View Code
转载于:https://www.cnblogs.com/Var123/p/5269885.html
Bzoj 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset相关推荐
- BZOJ 2453 维护队列
Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...
- 洛谷-P1903 数颜色 分块 bitset
题目 题目链接 题意 给你一个数列代表不同的颜色(可以修改). 询问一段区间内有多少种颜色. 题解 很容易想到的就是线段树来维护bitset. 这里为了练习,使用分块维护bitset. * 事实上线段 ...
- 2120: 数颜色(带修莫队)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 2120: 数颜色 Time Limit: 6 Sec Memory Limit ...
- 莫队入门例题之持久化莫队:2120: 数颜色
·述大意: 多个区间询问,询问[l,r]中颜色的种类数.可以单点修改颜色. ·分析: 莫队可以修改?那不是爆炸了吗. 这类爆炸的问题被称为带修莫队(可持久化莫队). 按照美妙类比思想,可 ...
- BZOJ 2120: 数颜色
2120 思路1:树状数组套主席树 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include&l ...
- 【BZOJ】2120: 数颜色
题解 练习一下带修改莫队 先按照左端点的块排序,再按照右端点的块排序,然后按照时间排序 每个修改操作存一下修改前这个位置的值就可以逆序操作了 代码 #include <bits/stdc++.h ...
- BZOJ2120 数颜色 【带修改莫队】
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 6579 Solved: 2625 [Submit][Status][Discus ...
- BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2141 是 hydro 的 BZOJ ...
- The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)
J. Jewel Grab Tartarus _Wallace_ 转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k ...
最新文章
- 【Linux】Linux简单操作之vi与vim编辑器
- 今日 Paper | 虚拟试穿网络;人群计数基准;联邦元学习;目标检测等
- 俩台电脑怎么设置同一局域网_【必看】局域网ip地址不够用怎么办?
- 011 吃药call功能分析和代码编写
- URAL 1091. Tmutarakan Exams
- Highcharts 中文参考文档
- matlab窗函数 响应,matlab窗函数设计方案.doc
- UIKit应用 - Swift 版本: 3.让UITableViewCell的背景色渐变
- PHP利用PDO从mysql读取大量数据处理(可做大量数据集的导出,业务调整等)
- linux 如何安装Python3.5
- 底部按钮吸附_知乎的药丸按钮(二)我的 iOS 实现
- VBS操作注册表设置新建读取,删除等操作(更新中)
- 【原创】Linux下追加磁盘空间的方法
- 基于阿里云服务器使用宝塔面板进行Hexo建站
- mysql读写分离优点_mysql读写分离
- 学校计算机社团面试问题及答案,社团二轮面试题目
- 全球 26 个主流视频网站高清视频下载全搞定,包括 P 站!
- papers with code介绍(人工智能方向研究生的必备网站)
- 丝滑!CVPR 2021 视频插帧论文+开源代码汇总
- Centos7 源码编译安装linux longterm 内核4.19.47
热门文章
- mooc c语言测验答案,MOOC-SPOC测试题(部分答案)(至数组一章)-C语言-宣城校区2016年...
- python rpc微服务框架_grpc的微服务探索实践
- 基于ssm的用户管理系统_基于SSM的高校学生实习管理系统
- ant指定servlet版本_Spring工具 - AntPathMatcherUrlPathHelper(针对URL进行处理)
- 《系统集成项目管理工程师》必背100个知识点-03项目管理过程组
- 笔记-项目采购管理-索赔的处理
- Vue中使用vue-video-player和videojs-flash插件实现播放rtmp视频文件流
- Leaflet中使用Leaflet.Pin插件实现图层要素编辑效果
- Vue中怎样封装与使用公共状态属性组件实现类似枚举类的效果
- C#中面向对象初使用-实现问好窗体程序