bzoj2120: 数颜色 &&bzoj2453: 维护队列
2024-10-19 02:26:25
题目大意:
你小时候玩过弹珠吗?
小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N。为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少。当然,A有时候会依据个人喜好,替换队列中某个弹珠的颜色。 但是A还没有学过编程,且觉得头脑风暴太浪费脑力了,所以向你来寻求帮助。
题解:莫队或者分块
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define maxn 1000500
using namespace std;
int n,m,blo,num,q;
int pre[maxn],c[maxn],b[maxn],last[maxn],pos[maxn];
int read()
{
int x=; char ch; bool bo=;
while (ch=getchar(),ch<''||ch>'') if (ch=='-') bo=;
while (x=x*+ch-'',ch=getchar(),ch>=''&&ch<='');
if (bo) return -x; return x;
}
void resort(int x)
{
int l=(x-)*blo+,r=min(x*blo,n);
for (int i=l; i<=r; i++) pre[i]=b[i];
sort(pre+l,pre+r+);
}
int find(int x,int val)
{
int l=blo*(x-)+,r=min(blo*x,n); int first=l;
while (l<=r)
{
int mid=(l+r)>>;
if (pre[mid]<val) l=mid+;
else r=mid-;
}
return l-first;
}
int ask(int l,int r)
{
int sum=;
if (pos[l]==pos[r])
{
for (int i=l; i<=r; i++) if (b[i]<l) sum++;
}
else
{
for (int i=l; i<=pos[l]*blo; i++) if (b[i]<l) sum++;
for (int i=r; i>=(pos[r]-)*blo+; i--) if (b[i]<l) sum++;
}
for (int i=pos[l]+; i<pos[r]; i++) sum+=find(i,l);
return sum;
}
void change(int x,int y)
{
for (int i=; i<=n; i++) last[c[i]]=;
c[x]=y;
for (int i=; i<=n; i++)
{
int t=b[i];
b[i]=last[c[i]];
last[c[i]]=i;
if (t!=b[i]) resort(pos[i]);
}
}
void init()
{
n=read(); q=read();
blo=((int)sqrt(n));
for (int i=; i<=n; i++) c[i]=read(),pos[i]=(i-)/blo+;
for (int i=; i<=n; i++)
{
b[i]=last[c[i]];
last[c[i]]=i;
}
num=(n-)/blo+;
for (int i=; i<=num; i++) resort(i);
}
void solve()
{
char ch[]; int x,y;
for (int i=; i<=q; i++)
{
scanf(" %s",ch+); x=read(); y=read();
if (ch[]=='Q') printf("%d\n",ask(x,y));
else change(x,y);
}
}
int main()
{
init();
solve();
}
最新文章
- viewgager
- 动作手游实时PVP技术揭密(服务器篇)
- Android开发使用TotalControl调试遇到的问题(备注)
- javaScript 将json字符串转换为json对象的方法解析
- sharedPreference
- redis的相关知识
- QT开发pjsip的VOIP,A8平台运行
- asp.net实现 EXCEL数据导入到数据库功能
- 深入探讨 Java 类加载器[转]
- 浅谈对java中锁的理解
- mkdir 命令详解
- Navicat 进行数据库自动备份
- JVM系列三:JVM参数设置
- External Input Counter and External interrupt
- maven部署项目流程(区分环境)
- 怎么在.net里面解析JSON文件?
- Linux系统下Nginx+PHP 环境安装配置
- springboot之内嵌tomcat修改端口号
- java笔记--关于多线程状态的理解和应用
- 《Java程序设计》实验4
热门文章
- 第13章 Swing程序设计----标签组件与图标
- filter by date in Sphinx
- activity管理类 appManager
- Android Screen Monitor使用
- 关于MyEclipse不停报错multiple problems have occurred 或者是内存不足 的解决办法
- apache2.2.25+mod_jk-apache-2.2.2.so+apache-tomcat-7.0.56集群
- android屏幕适配方法
- Android 联网监控抓包工具的制作(tcpdump的使用)
- 配置glance使用NFS后端
- 快速搭建本地HTTP服务器