BZOJ 2120 数颜色
来源:互联网 发布:赣州四中官网网络阅卷 编辑:程序博客网 时间:2024/05/19 13:59
Description
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会像你发布如下指令: 1、 Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔。 2、 R P Col 把第P支画笔替换为颜色Col。为了满足墨墨的要求,你知道你需要干什么了吗?
【题目分析】
分块+暴力+二分。
【代码】
#include <cmath>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;char op[15];int L[201],R[201],ne[201],l,r,ll,rr,x,y;int cnt,n,q,T;int a[20001],pre[20001],b[20001],last[1000001],bel[20001];int read(){ int ret=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9') { if (ch=='-') f=-1; ch=getchar(); } while (ch>='0'&&ch<='9') { ret*=10; ret+=ch-'0'; ch=getchar(); } return ret*f;}void query(){ int ans=0; l=read();r=read(); ll=bel[l];rr=bel[r]; if (ll==rr) { for (int i=l;i<=r;++i) if (pre[i]<l) ans++; printf("%d\n",ans); } else { for (int i=l;i<=R[ll];++i) if (pre[i]<l) ans++; for (int i=L[rr];i<=r;++i) if (pre[i]<l) ans++; for (int i=ll+1;i<rr;++i) { int tmp=L[i]-1; int ls=L[i],rs=R[i]; while (ls<rs) { int mid=(ls+rs)/2+1; if (b[mid]<l) ls=mid,tmp=ls; else rs=mid-1; } ans+=tmp-L[i]+1; } printf("%d\n",ans); }}void modify(int now){ for (int i=L[now];i<=R[now];++i) b[i]=pre[i]; sort(b+L[now],b+R[now]+1);}void mod(){ x=read();y=read(); for (int i=1;i<=n;++i) last[a[i]]=0; a[x]=y; for (int i=1;i<=n;++i) { int t=pre[i]; pre[i]=last[a[i]]; last[a[i]]=i; if (t!=pre[i]) modify(bel[i]); }}int main(){ n=read();q=read(); int T=sqrt(n); cnt=T; for (int i=1;i<=n;++i) a[i]=read(); for (int i=1;i<=T;++i) L[i]=R[i-1]+1,R[i]=i*T; R[T]=n; for (int i=1;i<=T;++i) for (int j=L[i];j<=R[i];++j) bel[j]=i; for (int i=1;i<=n;++i) { pre[i]=last[a[i]]; last[a[i]]=i; } for (int i=1;i<=T;++i) modify(i); while (q--) { scanf("%s",op); if (op[0]=='Q') query(); else mod(); }}
0 0
- bzoj 2120: 数颜色
- bzoj 2120: 数颜色
- bzoj 2120: 数颜色
- BZOJ 2120 数颜色
- BZOJ 2120 数颜色
- BZOJ 2120: 数颜色
- BZOJ 2120 数颜色
- bzoj 2120 数颜色 题解
- BZOJ 2120 数颜色 暴力
- bzoj 2120: 数颜色(分块)
- 【BZOJ 2120】【国家集训队 2011】【数颜色】
- 【BZOJ 2120】 数颜色 (分块,暴力)
- BZOJ 2120 数颜色 分块+二分
- bzoj 2120 数颜色(可持久化莫队)
- 【bzoj 2120】维护队列【bzoj 2453】数颜色 双倍经验!!!
- BZOJ 2453: 维护队列&&BZOJ 2120 数颜色 分块
- bzoj 2120 数颜色 树状数组套平衡树
- 【BZOJ 2120】 数颜色 (乱搞分块,直指暴力)
- 计算机网络之面试常考题
- leetcode求栈中最小的元素
- Android 热修复插件之AndFix
- spring mvc拦截器和<mvc:annotation-driven />的详解
- 数据结构实验之串一:KMP简单应用(java实现)
- BZOJ 2120 数颜色
- 理解String的compareTo()方法返回值
- Spring MVC静态资源处理
- 为什么判断 std::vector 是否为空时,用 if(0==vec.size()) 提示效率低,但用 if (vec.empty()) 正常?
- Android四大基本组件介绍与生命周期
- Atitit 软件项目非法模块与功能的管理与 监狱管理的对比 原理与概论attilax总结
- 算法Week08.04 - LeetCode 46. Permutations
- 关于客户端断开连接后服务器抛出异常Connection reset
- 356_实现头布局加ViewPager