给出一个有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. 银行系统ps:不太完善,蟹蟹评论

    # 主程序运行 import time from guanli import GuanLi from atm import ATM from user import User def main(): ...

  2. [python]np.loadtxt报错

    np.loadtxt报错 通过pandas生成的cvs数据利用nump.loadtxt读取的时候 tmp = np.loadtxt('test.csv', dtype=np.str, delimite ...

  3. 更新字典 (Updating a Dictionary,UVa12504)

    题目描述: 解题思路: 1.根据:和,获得字符串 2.使用两个map进行比较: #include <iostream> #include <algorithm> #includ ...

  4. (转载)IE8+兼容经验小结

    本文分享下我在项目中积累的IE8+兼容性问题的解决方法.根据我的实践经验,如果你在写HTML/CSS时候是按照W3C推荐的方式写的,然后下面的几点都关注过,那么基本上很大一部分IE8+兼容性问题都OK ...

  5. MySQL Proxy使用

    使用MySQL将读写请求转接到主从Server. 一 安装MySQL Proxy MySQL Proxy的二进制版非常方便,下载解压缩后即用. 解压缩的目录为: $mysql-proxy_instal ...

  6. cookie,localstorge,sessionstorge三者总结

    相同点:都是客户端存储东西的: 不同: 1大小,cookie最小;locastorge最大 2 cookie设置好会在header头里面自动带的:但是ls和ss不会:ls同个浏览下不同网页(非跨域)都 ...

  7. allocator类

    一.动态数组 [new的局限性] new将内存分配和对象构造组合在一起,同样delete将对象析构和内存释放组合在一起 我们分配单个对象时,通常希望将内存分配和对象初始化组合在一起(我们知道对象应有什 ...

  8. Thunder团队第一周 - Scrum会议7

    Scrum会议7 小组名称:Thunder 项目名称:爱阅app Scrum Master:宋雨 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康 ...

  9. 第二次作业(1001.A+B Format (20))

    代码文件及题目描写已放至此 一开始看题目的时候有点没看懂,要求把数分组是什么意思.如果只是单纯的a+b的话是不可能的,所以关于这一点犹豫了很久.本来以为是指把a,b,以及它们的和c各建一个数组,但只输 ...

  10. 文件异步上传-ajaxFileUpload

    $.ajaxFileUpload是一个jquery插件 文章:jQuery插件之ajaxFileUpload