bzoj1878 [ SDOI2009 ] --离线+树状数组
来源:互联网 发布:meshlab shader 编程 编辑:程序博客网 时间:2024/06/14 06:06
这题在线做很麻烦,所以我们选择离线。
首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置。
然后对与每种颜色第一次出现的位置x,将a[x]++。
将每个询问按左端点排序,再从左往右扫,将next[i]++,如果是询问就先返回sum[r]-sum[l-1](sum是a的前缀和)。其中前缀和可以用树状数组维护。
因为做一个询问之前l到r的所有颜色都加且仅加了1,所以答案就是sum[r]-sum[l-1]。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if(p1==p2){ p2=(p1=buf)+fread(buf,1,100000,stdin); if(p1==p2)return EOF; } return *p1++;}inline void read(int& x){ char c=nc(),b=1; for(;!(c>='0'&&c<='9');c=nc())if(c=='-')b=-1; for(;c>='0'&&c<='9';x=x*10+c-48,c=nc());x*=b;}struct ask{ int s,e,f;}b[200001];inline bool cmp(ask x,ask y){ return x.s<y.s;}int ans[200001],i,j,k=1,n,a[50001],last[1000001],m,c[50001],x,y,next[50001];inline int lowbit(int x){ return x&(-x);}inline void update(int x){ for(int i=x;i<=n;i+=lowbit(i))c[i]++;}inline int query(int x){ int ans=0; for(int i=x;i>0;i-=lowbit(i))ans+=c[i]; return ans;}int main(){ read(n); for(i=1;i<=n;i++)read(a[i]); read(m); for(i=1;i<=m;i++)read(b[i].s),read(b[i].e),b[i].f=i; sort(b+1,b+m+1,cmp); for(i=1;i<=n;i++) if(!last[a[i]]){ last[a[i]]=i; update(i); }else{ next[last[a[i]]]=i; last[a[i]]=i; } for(i=1;i<=m;i++){ while(k<b[i].s){ if(next[k])update(next[k]); k++; } ans[b[i].f]=query(b[i].e)-query(b[i].s-1); } for(i=1;i<=m;i++)printf("%d\n",ans[i]); return 0;}
阅读全文
0 0
- bzoj1878 [ SDOI2009 ] --离线+树状数组
- 【SDOI2009】【bzoj1878】HH的项链(离线+树状数组)
- 【bzoj1878】[SDOI2009]HH的项链 树状数组+离线
- BZOJ1878: [SDOI2009]HH的项链(树状数组+离线)
- [离线+树状数组 || 主席树]BZOJ1878: [SDOI2009]HH的项链
- bzoj1878: [SDOI2009]HH的项链(树状数组+离线处理)
- [SDOI2009][Bzoj1878] HH的项链 离线+树状数组
- 【莫队 or 离线+树状数组】BZOJ1878(SDOI2009)[HH的项链]题解
- [SDOI2009][BZOJ1878][前缀和][树状数组]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的项链 题解
- 【主席树|莫队|离线树状数组】BZOJ1878 [SDOI 2009]HH的项链
- [BZOJ1878]SDOI2009HH的项链|树状数组
- 【树状数组】[BZOJ1878]HH的项链
- 使用c#数据库连接池
- HZAU_1208_color_circle(dfs)
- bzoj1503 [ NOI2004 ] --treap
- 数据结构实验——串的加密
- bzoj1001 -- 最短路
- bzoj1878 [ SDOI2009 ] --离线+树状数组
- 求 以孩子-兄弟链表表示的树 的度、深度、叶结点和边
- bzoj1854 [ SCOI2010 ] --并查集
- Java面向对象,单例设计模式
- bzoj4518 [ SDOI2016 ] --斜率优化DP
- bzoj2820--莫比乌斯反演
- LoadRunner中自定义C函数实现字符串替换
- 支付业务-简单介绍-不定期更新
- bzoj2693--莫比乌斯反演+积性函数线性筛