给出一个有n个元素的数组,有以下两种操作:Q x y,求出区间[x,y)内不同元素的个数,

M x y,把第x个元素的值修改为y。注意题目中的下标是从0开始的

这题超级超级坑

妈的一个水题找了几个小时的BUG

  这样AC

这样WA

 吃一堑长一智  妈的毒瘤啊 
 
 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn = 1e6 + ;
int n, m, L, R, ans, sz, qsz, tsz;
int a[maxn], ANS[maxn], num[maxn], now[maxn], flag[maxn];
struct node {
int l, r, id, t;
node() {}
node(int l, int r, int id, int t): l(l), r(r), id(id), t(t) {}
bool operator < (const node &b)const {
if (l / sz == b.l / sz) {
if (r / sz == b.r / sz) return t < b.t;
return r < b.r;
}
return l < b.l;
}
} qu[maxn];
struct node1 {
int pos, x, y;
node1() {}
node1(int pos, int x, int y): pos(pos), x(x), y(y) {}
} c[maxn];
void add(int val) {
if (num[a[val]] == ) ans++;
num[a[val]]++; }
void del(int val) {
num[a[val]]--;
if (num[a[val]] == ) ans--;
}
void change(int pos, int x) {
if (L <= pos && pos <= R) del(pos);
a[pos] = x;
if (L <= pos && pos <= R) add(pos);
}
int main() {
scanf("%d%d", &n, &m);
sz = (int)sqrt((double)n + 0.5);
qsz = tsz = ;
for (int i = ; i <= n ; i++) {
scanf("%d", &a[i]);
now[i] = a[i];
}
for (int i = ; i <= m ; i++) {
char s[];
scanf("%s", s);
if(s[] == 'Q') {
int l, r;
scanf("%d%d", &l, &r);
l++;
qsz++;
qu[qsz] = node(l, r, qsz, tsz);
} else {
int pos, x;
scanf("%d%d", &pos, &x);
pos++;
tsz++;
c[tsz].pos = pos, c[tsz].x = x, c[tsz].y = now[pos];
now[pos] = x;
}
}
for (int i = ; i <= n ; i++) now[i] = a[i];
int t = ;
sort(qu + , qu + + qsz);
L = , R = , ans = ;
for (int i = ; i <= qsz ; i++) {
while(L < qu[i].l) del(L++);
while(R > qu[i].r) del(R--);
while(L > qu[i].l) add(--L);
while(R < qu[i].r) add(++R);
while(t < qu[i].t) t++, change(c[t].pos, c[t].x);
while(t > qu[i].t) change(c[t].pos, c[t].y), t--;
ANS[qu[i].id] = ans;
}
for (int i = ; i <= qsz ; i++)
printf("%d\n", ANS[i]);
return ;
}

Dynamic len(set(a[L:R])) UVA - 12345(这么过分一定要写博客)的更多相关文章

  1. (待修莫队 没过! 抽空在检查)Dynamic len(set(a[L:R])) UVA - 12345

    #include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...

  2. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  3. 【题解】Luogu UVA12345 Dynamic len(set(a[L:R]))

    原题传送门 这题要用动态莫队,我博客里有介绍 这道题和luogu P1903 [国家集训队]数颜色 / 维护队列差不多,解法就在上面那篇博客里qaq 主要的问题是如何排序? 排序有三个关键字: 1.左 ...

  4. 分块入门(根据hzwer的博客。。)(右端点是r不是n。。)

    1.区间更新单点查询 #include <bits/stdc++.h> using namespace std; #define ll long long #define maxn 100 ...

  5. UVA 12345 Dynamic len(带修莫队)

    Dynamic len [题目链接]Dynamic len [题目类型]带修莫队 &题解: 莫队可以单点更改,只要再多加一维,代表查询次数,排序的时候3个关键字. 之后循环离线的时候,先暴力时 ...

  6. UVA 12345 Dynamic len(set(a[LR]))

    题意:询问区间唯一元素个数,单点修改. 分析: 借助Unique snowflakes, Can you answer these queries II的思想,唯一性可以借助元素上一次出现的位置来判断 ...

  7. 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。

    在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作.一次移动操作指用一个"LX"替换一个"XL ...

  8. CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)

    题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...

  9. 中间值为什么为l+(r-l)/2,而不是(l+r)/2

    二分法的算法中,我们看到一些代码里取中间值: MID=l+(r-l)/2; 为什么是这个呢?不就是(l+r)/2吗?为什么要多此一举呢? 其实还是有不一样的,看看他们的区别吧: l,r是指针的时候只能 ...

随机推荐

  1. lintcode 二叉树前序遍历

    二叉树的前序遍历    给出一棵二叉树,返回其节点值的前序遍历. 您在真实的面试中是否遇到过这个题? Yes 样例 给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3]. / ...

  2. 【token接口】-jmeter

    token 接口 3步骤 1.登录接口 2.提取登录接口的token 3.http 信息管理头   把提取的cookie传入  就可以了

  3. Java抽象与接口的区别

    Java抽象与接口的区别 答案方式一.简单来说,1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的, 2.另外,实现接口的一定要实现接口里定义的所有 ...

  4. POJ 3498 March of the Penguins(网络最大流)

    Description Somewhere near the south pole, a number of penguins are standing on a number of ice floe ...

  5. 关于ES6-{块级作用域 let const 解构赋值 数组 字符串 函数的扩展 箭头函数}

    关于ES6 块级作用域 任何一对花括号({})中的语句集都属于一个块,在块中声明的变量在代码块外都是不可访问的,称之为块级作用域,ES5以前没有块级作用域 let let 是ES6新增的声明变量的一种 ...

  6. jQuery File Upload文件上传插件简单使用

    前言 开发过程中有时候需要用户在前段上传图片信息,我们通常可以使用form标签设置enctype=”multipart/form-data” 属性上传图片,当我们点击submit按钮的时候,图片信息就 ...

  7. TCP系列33—窗口管理&流控—7、Silly Window Syndrome(SWS)

    一.SWS介绍 前面我们已经通过示例看到如果接收端的应用层一直没有读取数据,那么window size就会慢慢变小最终可能变为0,此时我们假设一种场景,如果应用层读取少量数据(比如十几bytes),接 ...

  8. Swagger字段说明

    常用字段说明 字段 说明 schemes 使用协议(如:http.https) host 项目地址,这个地址会作为每个接口的url base,拼接起来一起作为防伪地址 consumes 接口默认接收的 ...

  9. phpcms 最多上传 10 个附件 解决办法

    修改文件:/phpcms/libs/classes/form.class.php

  10. .NET环境下,通过LINQ操作SQLite数据库

    //对应数据库中的某个表 [Table(Name = "main.Student")]    public class Student    {        [Column(Na ...