BZOJ 1878 [SDOI2009]HH的项链 (莫队算法)
来源:互联网 发布:网站排名软件利搜 编辑:程序博客网 时间:2024/06/01 22:56
题意:
给你n个数字,然后查询某个区间有多少种数字
思路:
莫队裸题,用一个cnt维护区间数字的数量就能实现o(1)转移了
错误及反思:
代码:
#include<bits/stdc++.h>using namespace std;const int maxn= 50000+10;const int maxm= 1000000+10;int pos[maxn];int cnt[maxm];int arr[maxn];int n,m;int ans[200010];int now=0;struct query{ int l,r,id;}Q[200010];bool cmp(query a,query b){ if(pos[a.l]==pos[b.l]) return a.r<b.r; return a.l<b.l;}inline void update(int num,int q){ if(cnt[num]!=0) now--; cnt[num]+=q; if(cnt[num]!=0) now++;}int main(){ scanf("%d",&n); int block=sqrt(n); for(int i=1;i<=n;i++) { scanf("%d",&arr[i]); pos[i]=i/block; } scanf("%d",&m); for(int i=0;i<m;i++) { scanf("%d%d",&Q[i].l,&Q[i].r); Q[i].id=i; } sort(Q,Q+m,cmp); for(int i=0,l=1,r=0;i<m;i++) { for(;l<Q[i].l;l++) update(arr[l],-1); for(;l>Q[i].l;l--) update(arr[l-1],1); for(;r<Q[i].r;r++) update(arr[r+1],1); for(;r>Q[i].r;r--) update(arr[r],-1); ans[Q[i].id]=now; } for(int i=0;i<m;i++) printf("%d\n",ans[i]);}
阅读全文
0 0
- bzoj 1878: [SDOI2009]HH的项链(莫队算法)
- [BZOJ]1878: [SDOI2009]HH的项链 莫队算法
- bzoj 1878: [SDOI2009]HH的项链(莫队算法)
- BZOJ 1878 [SDOI2009]HH的项链 (莫队算法)
- BZOJ 1878 SDOI2009 HH的项链 树状数组/莫队算法
- BZOJ 1878 [SDOI2009]HH的项链——离线+树状数组||莫队算法
- bzoj 1878 [SDOI2009]HH的项链
- BZOJ-1878-HH的项链-SDOI2009
- BZOJ 1878: [SDOI2009]HH的项链
- BZOJ 1878 [SDOI2009]HH的项链
- BZOJ 1878 [SDOI2009]HH的项链
- 【BZOJ 1878】[SDOI2009]HH的项链 莫队
- 【bzoj 1878】[SDOI2009]HH的项链
- BZOJ 1878 [SDOI2009]HH的项链 莫队
- bzoj 1878: [SDOI2009]HH的项链
- BZOJ 1878: [SDOI2009]HH的项链
- BZOJ_P1878&Codevs_P2307 [SDOI2009]HH的项链(莫队算法)
- BZOJ 1878 HH的项链(莫队算法)
- angular2,4,5使用cookie保存用户数据
- cookielib模块基础学习
- 发布公网80端口网站
- mac常用操作(一)
- 酷播云存储,简易使用教程
- BZOJ 1878 [SDOI2009]HH的项链 (莫队算法)
- linux总结mysql常用命令
- 接口
- Unity脚本自动添加注释脚本及头部注释排版格式
- dijkstra算法
- NOIP2010第二题 ---数字统计(摘自洛谷题解)
- 第四章 网际层
- Eclipse自定义类注释模板设置--伪静态首页的拦截☞动态jsp跳转
- mysql多个TimeStamp设置的方法解读