当前位置: 首页 > news >正文

QOJ #8240. Card Game

Solution

【题目传送门】。

\(f_{l,r}\) 表示 \([l,r]\) 区间的答案,\(i\) 右边第一个与其数字相同的位置为 \(nxt_i\)。考虑 \(l\) 是否会被消掉,有:

\[f_{l,r}= \begin{cases} f_{l+1,r}+1,\ \ \ \ \ \ \ \ nxt_l>r\\ f_{nxt_l+1,r},\ \ \ \ \ \ \ \ \ \ \ nxt_l\le r \end{cases} \]

其中 \(f_{i+1,i}=0\)

会发现 \(f_{l,r}\)\(f_{l+1}\) 的某一段和 \(f_{nxt_l+1}\) 的某一段拼接而成。因为强制在线,用主席树维护。

具体的区间加用标记永久化来维护。

复杂度 \(\mathcal{O}(n\log n)\)

Code

#include<bits/stdc++.h>
#define IOS cin.tie(0),cout.tie(0),ios::sync_with_stdio(0)
#define ll long long
#define db double
#define pb push_back
#define eb emplace_back
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define PLL pair<ll,ll>
#define PII pair<int,int>
#define lb(x) ((x)&(-x))
using namespace std;
const int N=3e5+20,M=1e5+20;
const ll INF=1ll<<60,mod=998244353;
namespace H_H{int n,m,a[N],nxt[N],pos[N];int rt[N],tot;struct Tree{int ls,rs,pre;#define ls(p) t[p].ls#define rs(p) t[p].rs#define pre(p) t[p].pre}t[N<<8];inline int cpynode(int p){t[++tot]=t[p];return tot;}void update(int &p,int L,int R,int l,int r,int d,bool flag){if(flag) p=cpynode(p);else if(!p) p=++tot;if(l<=L && R<=r) return pre(p)+=d,void();int mid=(L+R)>>1;if(l<=mid) update(ls(p),L,mid,l,r,d,flag);if(mid<r) update(rs(p),mid+1,R,l,r,d,flag);}void cpy(int &rt1,int rt2,int L,int R,int l,int r,int Tot){if(l<=L && R<=r){rt1=cpynode(rt2);pre(rt1)+=Tot;return ;}rt1=cpynode(rt1);int mid=(L+R)>>1;if(l<=mid) cpy(ls(rt1),ls(rt2),L,mid,l,r,Tot-pre(rt1)+pre(rt2));if(mid<r) cpy(rs(rt1),rs(rt2),mid+1,R,l,r,Tot-pre(rt1)+pre(rt2));}int query(int p,int L,int R,int x){if(L==R) return pre(p);int mid=(L+R)>>1;if(x<=mid) return query(ls(p),L,mid,x)+pre(p);else return query(rs(p),mid+1,R,x)+pre(p);}int main(){cin>>n>>m;for(int i=1;i<=n;i++) cin>>a[i];for(int i=n;i;i--){nxt[i]=pos[a[i]];pos[a[i]]=i;}update(rt[n],1,n,n,n,1,1);if(n^1) update(rt[n],1,n,n-1,n-1,0,1);for(int i=n-1;i;i--){rt[i]=rt[i+1];update(rt[i],1,n,i,n,1,1);if(i^1) update(rt[i],1,n,i-1,i-1,0,1);if(nxt[i] && nxt[i]+1<=n) cpy(rt[i],rt[nxt[i]+1],1,n,nxt[i],n,0);else if(nxt[i]==n) update(rt[i],1,n,n,n,-query(rt[i],1,n,n),1);}int ans=0;for(int i=1,l,r;i<=m;i++){cin>>l>>r;l^=ans,r^=ans;cout<<(ans=query(rt[l],1,n,r))<<"\n";}return 0;}
}
int main(){IOS;H_H::main();return 0;
}
http://www.jsqmd.com/news/188779/

相关文章:

  • 2026年国内知名的铝合金衬塑复合管厂家推荐榜单,PERT铝合金衬塑复合管、PPR铝合金衬塑复合管订做厂家推荐 - 品牌推荐师
  • 2026年市场评价高的铝合金衬PB复合管公司推荐,铝合金衬塑复合管、PERT铝合金衬塑复合管公司排行榜 - 品牌推荐师
  • No.1059 基于S7-1200 PLC博图和组态王升降横移立体库7车位3x3 带解释的梯形...
  • 【毕业设计】使用 CNN 进行森林火灾检测机器学习
  • 离线地图开发3D离线地图开发
  • 深度测评 8个一键生成论文工具:本科生毕业论文写作全攻略
  • 二分法
  • 【课程设计/毕业设计】人工智能使用 CNN 进行森林火灾检测
  • 提示工程架构师实战案例:用Prompt生成的动漫表情包,成为了网络热梗!
  • COMSOL三维电弧放电模拟:温度场、流体场及电磁场分布研究
  • 【课程设计/毕业设计】人工智能基于深度学习方法的头盔佩戴检测研究与系统实现
  • 1.3 闲话
  • 深入解析:WPS绿色纯净版(无联网功能) v10.1.0.6876
  • 深度学习计算机毕设之基于深度学习方法的头盔佩戴检测研究与系统实现机器学习
  • 写论文软件哪个好?实测终极答案:虎贲等考 AI 凭 “学术全 buff” 封神!
  • 深度学习毕设项目:基于机器学习深度学习方法的头盔佩戴检测研究与系统实现
  • 学术写作AI工具全景测评:覆盖研究全流程的9大优选方案
  • 提示工程架构师必看!这10个技巧,帮你告别“加班常态化”
  • 计算机深度学习毕设实战-基于人工智能+深度学习方法的头盔佩戴检测研究与系统实现
  • 智能辅助学术写作:9款AI工具全方位提升开题与论文效率
  • 深度学习毕设选题推荐:基于深度学习方法+人工智能的头盔佩戴检测研究与系统实现
  • 市面上诚信的阻氧型铝合金衬塑复合管供货厂家,铝合金衬塑复合管、PERT铝合金衬塑复合管、PPR铝合金衬塑复合管厂家推荐 - 品牌推荐师
  • 论文写作全周期辅助:9款人工智能工具性能测评报告
  • 基于AI的学术写作效率提升:9款专业工具全流程评测
  • 【毕业设计】基于深度学习方法机器学习的头盔佩戴检测研究与系统实现
  • 规范虚拟机性能优化实战技术文章大纲
  • 离线地图开发 局域网部署 脱离互联网的离线地图API学习交流
  • phome_enewshyclass 数据表字段解释(好友分类表)
  • 单元测试
  • 单元测试