【bzoj 3809】Gty的二逼妹子序列 题解&代码(c++)
来源:互联网 发布:零基础学sql视频教程 编辑:程序博客网 时间:2024/05/21 17:58
题目链接:
http://www.lydsy.com/JudgeOnline/problem.php?id=3809
题解:
bzoj脸太黑,蜜汁超时,具体算法是莫队+分块,唉
代码:(超时的代码)
#include<iostream>#include<algorithm>#include<string.h>#include<stdio.h>#include<math.h>#define maxn (100005)#define maxm (1000005)using namespace std;int len;struct node{ int l,r; int a,b; int id;}q[maxm];int cmp(node x,node y){ int idx=x.l/len; int idy=y.l/len; if (idx!=idy) return idx<idy; else return x.r<y.r;}int n,m,s[maxn],ans[maxm],sq[maxn],cnt[maxn],k[maxn];int f(int x,int y){ int ans=0; int X=sq[x]; int Y=sq[y]; if (sq[x]==sq[y]) { for (int i=x;i<=y;i++) if (cnt[i]>0) ans++; return ans; } while(X==sq[x]) { if (cnt[x]>0) ans++; x++; } while(Y==sq[y]) { if (cnt[y]>0) ans++; y--; } for (int i=sq[x];i<=sq[y];i++) ans+=k[i]; return ans;}int main(){ scanf("%d%d",&n,&m); for (int i=1;i<=n;i++) scanf("%d",&s[i]); len=sqrt(n); for (int i=1;i<=m;i++) { scanf("%d%d%d%d",&q[i].l,&q[i].r,&q[i].a,&q[i].b); q[i].id=i; } for (int i=1;i<=n;i++) sq[i]=(i-1)/len+1; sort(q+1,q+1+m,cmp); int nowL=0,nowR=0; for (int i=1;i<=m;i++) { node now=q[i]; while (now.l > nowL) { cnt[s[nowL]]--; if (cnt[s[nowL]]==0) k[sq[s[nowL]]]--; nowL++; } while(now.l < nowL) { nowL--; cnt[s[nowL]]++; if (cnt[s[nowL]]==1) k[sq[s[nowL]]]++; } while(now.r < nowR) { cnt[s[nowR]]--; if (cnt[s[nowR]]==0) k[sq[s[nowR]]]--; nowR--; } while(now.r > nowR) { nowR++; cnt[s[nowR]]++; if (cnt[s[nowR]]==1) k[sq[s[nowR]]]++; } ans[now.id]=f(now.a,now.b); } for (int i=1;i<=m;i++) printf("%d\n",ans[i]);}
0 0
- 【bzoj 3809】Gty的二逼妹子序列 题解&代码(c++)
- BZOJ 3809 3809: Gty的二逼妹子序列
- bzoj-3809 Gty的二逼妹子序列
- [bzoj 3809] Gty的二逼妹子序列 莫队+分块
- BZOJ 3809 Gty的二逼妹子序列
- BZOJ 3809 Gty的二逼妹子序列
- 【BZOJ 3809】Gty的二逼妹子序列 莫队+分块
- BZOJ 3809: Gty的二逼妹子序列 莫队套分块
- BZOJ 3809: Gty的二逼妹子序列
- bzoj 3809: Gty的二逼妹子序列
- 3809: Gty的二逼妹子序列
- [BZOJ]3809 3809: Gty的二逼妹子序列 莫队+分块
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
- BZOJ 3809: Gty的二逼妹子序列|莫队算法|分块
- bzoj 3809: Gty的二逼妹子序列(莫队算法+分块)
- BZOJ-3809 Gty的二逼妹子序列 莫队算法 分块
- bzoj3809: Gty的二逼妹子序列
- 在inet下写一个“HelloWorld”程序
- Android Studio添加Parcelable序列化小工具(快速提高开发效率)
- 工厂模式
- 【Android进阶】Android自定义组件之自动换行View,以TextView为例
- 解决ReactNative崩溃:Can't find variable: __fbBatchedBridge
- 【bzoj 3809】Gty的二逼妹子序列 题解&代码(c++)
- HTTP 错误 500.21 - Internal Server Error 解决方案
- 第3周项目3—输出星号图(打印菱形)
- static 关键字的作用
- 日期匹配星座,月日匹配星座,android 星座
- 第二周 项目四
- 第三周项目1
- jBPM--GPD中文乱码问题
- 拓扑排序