Codeforces
来源:互联网 发布:ubuntu netstat不存在 编辑:程序博客网 时间:2024/05/21 10:35
题目连接:Codeforces - 813E - Army Creation
区间
这样,如果一个数
这样问题就转化为求一个区间内有多少数小于
如果是离线的话,可以用莫队来做,复杂度是
但是这题强制在线。强制在线分块的话有
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+7;vector<int> order[N];int n,k;int dp[350][N],p[N],a[N],b[N];struct Block{ int l,r;};Block bl[350];int main(){ ios::sync_with_stdio(false); cin >> n >> k; int len=(int)sqrt(n); int sz=(n-1)/len+1; for(int i=1;i<=n;i++) { int t,v; cin>>t; a[i]=t; if(order[t].size()>=k) b[i]=order[t][order[t].size()-k]; else b[i]=0; order[t].push_back(i); v=b[i]; p[i]=(i-1)/len+1; if(!bl[p[i]].l) bl[p[i]].l=i; bl[p[i]].r=i; ++dp[p[i]][v]; } for(int i=1;i<=sz;i++) for(int j=1;j<=n;j++) dp[i][j]+=dp[i][j-1]; int q,ans=0,l,r; cin >> q; while(q--) { cin >> l >> r; l=(l+ans)%n+1; r=(r+ans)%n+1; ans=0; if(l>r) swap(l,r); if(p[l]==p[r]) { for(int i=l;i<=r;i++) if(b[i]<l) ans++; } else { for(int i=l;i<=bl[p[l]].r;i++) if(b[i]<l) ans++; for(int i=bl[p[r]].l;i<=r;i++) if(b[i]<l) ans++; for(int i=p[l]+1;i<p[r];i++) ans+=dp[i][l-1]; } cout << ans << endl; } return 0;}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Android MediaPlayer的简单使用(二)
- 线程死锁
- Codeforces 313D Ilya and Roads 题解
- 中断线程
- 前后端性能优化
- Codeforces
- 查找深层次的子节点
- 数据挖掘关联分析中的支持度、置信度和提升度
- JAVA学习笔记——Random类
- 载波相位测量值
- 【Deep Learning】地表覆盖相关图片下载(谷歌地球、Python代码)
- [乐意黎原创]纪念一下从CSDN注册会员开始的十余年
- 有关jsp页面重填的方法
- pkg-config命令