spoj D-query (莫队)
来源:互联网 发布:单片机usb通讯协议 编辑:程序博客网 时间:2024/06/02 04:51
查一段区间出现的不同数字个数,赤裸裸的莫队。
网上那些spoj的题号都是哪来的。。我怎么找不到题号呢。。
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#define ll long long#define M 200005using namespace std;int n,m,f[1000005],a[30005],ANS[M],block,ans;struct query{int l,r,id,block;}q[M];inline int read(){int x=0;char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();return x;}bool cmp(query x,query y){return x.block==y.block?x.r<y.r:x.block<y.block;}inline void del(int x){f[a[x]]--;if(f[a[x]]==0) ans--;}inline void add(int x){f[a[x]]++;if(f[a[x]]==1) ans++;}int main(){//freopen("a.in","r",stdin);n=read();block=sqrt(n);for(int i=1;i<=n;++i) a[i]=read();m=read();for(int i=1;i<=m;++i){q[i].l=read();q[i].r=read();q[i].id=i;q[i].block=(q[i].l-1)/block;}sort(q+1,q+m+1,cmp);int l=1,r=0;for(int i=1;i<=m;++i){for(;l<q[i].l;++l) del(l);for(;l>q[i].l;--l) add(l-1);for(;r<q[i].r;++r) add(r+1);for(;r>q[i].r;--r) del(r);ANS[q[i].id]=ans; } for(int i=1;i<=m;++i) printf("%d\n",ANS[i]); return 0;}
阅读全文
0 0
- spoj D-query (莫队)
- spoj D-Query(主席树)
- Spoj 3267. D-query
- SPOJ D-QUERY
- SPOJ DQUERY - D-query
- D-query SPOJ
- D-query SPOJ
- D-query SPOJ
- spoj DQUERY D-query SPOJ -(主席树)
- spoj-D-query(主席树)
- [SPOJ 3267] D-query (离线询问+树状数组)
- [SPOJ 3267] D-query (主席树入门)
- SPOJ 3267. D-query 主席树
- SPOJ DQUERY D-query 莫队算法
- SPOJ DQUERY D-query 主席树
- SPOJ DQUERY D-query 树状数组离线
- SPOJ D-query(主席树应用)
- SPOJ DQUERY D-query 莫队算法
- 欢迎使用CSDN-markdown编辑器
- 移动端Retina屏边框线1px 显示为2px或3px问题解决方法
- 部分和问题(基础DFS)
- android控件两次点击才响应的另一个原因
- Java基础知识点
- spoj D-query (莫队)
- Java_基础—集合的总结
- I2C 通信
- C++的异常抛出与捕获
- linux: NAT技术和代理服务器
- BleachBit清理垃圾
- Java Service Wrapper-构建自己的Wrapper应用
- UVA10129PlayOnWords
- 模拟 字符串变一样