题目大意:

    你小时候玩过弹珠吗?
    小朋友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();
}

最新文章

  1. viewgager
  2. 动作手游实时PVP技术揭密(服务器篇)
  3. Android开发使用TotalControl调试遇到的问题(备注)
  4. javaScript 将json字符串转换为json对象的方法解析
  5. sharedPreference
  6. redis的相关知识
  7. QT开发pjsip的VOIP,A8平台运行
  8. asp.net实现 EXCEL数据导入到数据库功能
  9. 深入探讨 Java 类加载器[转]
  10. 浅谈对java中锁的理解
  11. mkdir 命令详解
  12. Navicat 进行数据库自动备份
  13. JVM系列三:JVM参数设置
  14. External Input Counter and External interrupt
  15. maven部署项目流程(区分环境)
  16. 怎么在.net里面解析JSON文件?
  17. Linux系统下Nginx+PHP 环境安装配置
  18. springboot之内嵌tomcat修改端口号
  19. java笔记--关于多线程状态的理解和应用
  20. 《Java程序设计》实验4

热门文章

  1. 第13章 Swing程序设计----标签组件与图标
  2. filter by date in Sphinx
  3. activity管理类 appManager
  4. Android Screen Monitor使用
  5. 关于MyEclipse不停报错multiple problems have occurred 或者是内存不足 的解决办法
  6. apache2.2.25+mod_jk-apache-2.2.2.so+apache-tomcat-7.0.56集群
  7. android屏幕适配方法
  8. Android 联网监控抓包工具的制作(tcpdump的使用)
  9. 配置glance使用NFS后端
  10. 快速搭建本地HTTP服务器