一、题目描述:
给你一个长度为
现在有
操作仅对本次有效,并不会真的改变序列。求出每次操作后的最长严格上升子序列。
数据范围:
二、解题思路:
其实这个题就是想让你掌握树状数组求
也许你会说:这不是小学生都会!是的,我就不会。
实际上真的很简单,考虑到转移方程
很明显的线段树区间修改不就行了吗。
大概是我学
现在看来很显然,因为区间是前后缀所以可以用树状数组代替线段树。
然后就容易求出以
求
不难发现一次修改后新的的
如果
这里的
离线下来全部跑一边就可以求出新的
如果
怎么求某一个点是不是
不过我当然是想不到的,直接上经典结论:
现在你按照上述结论跑就可以了,结论很好,也很简单,时间复杂度
三、完整代码:
1 #include<iostream> 2 #include<algorithm> 3 #define N 800010 4 #define rep(i,l,r) for(int i=l;i<=r;i++) 5 #define per(i,r,l) for(int i=r;i>=l;i--) 6 using namespace std; 7 int n,m,num,lis,a[N],f[N],g[N],b[N],c[N],t[N],k[N],ans[N]; 8 int qry(int u){ 9 int res=0; while(u)res=max(res,c[u]),u-=u&-u; return res; 10 } 11 void upt(int u,int val){ 12 while(u<=num) c[u]=max(c[u],val),u+=u&-u; 13 } 14 struct Query{ 15 int pos,val,f,g,id; 16 bool operator < (const Query &t) const { 17 return pos<t.pos; 18 } 19 }q[N]; 20 signed main(){ 21 ios::sync_with_stdio(false); 22 cin.tie(0); cout.tie(0); 23 cin>>n>>m; rep(i,1,n) cin>>a[i],b[++num]=a[i]; 24 rep(i,1,m) cin>>q[i].pos>>q[i].val,q[i].id=i; 25 rep(i,1,m) b[++num]=q[i].val; 26 sort(b+1,b+1+num); num=unique(b+1,b+1+num)-b-1; 27 rep(i,1,m) q[i].val=lower_bound(b+1,b+1+num,q[i].val)-b; 28 rep(i,1,n) a[i]=lower_bound(b+1,b+1+num,a[i])-b; 29 rep(i,1,n) f[i]=qry(a[i])+1,upt(a[i]+1,f[i]); 30 rep(i,1,num) c[i]=0; 31 per(i,n,1) g[i]=qry(num+1-a[i])+1,upt(num+2-a[i],g[i]); 32 rep(i,1,n) lis=max(lis,f[i]+g[i]-1); 33 rep(i,1,n) if(f[i]+g[i]-1==lis) t[f[i]]++; 34 rep(i,1,n) if(f[i]+g[i]-1==lis&&t[f[i]]==1) k[i]=1; 35 sort(q+1,q+1+m); rep(i,1,num) c[i]=0; int now=1; 36 rep(i,1,n){ 37 while(now<=m&&q[now].pos==i) 38 q[now].f=qry(q[now].val)+1,now++; 39 upt(a[i]+1,qry(a[i])+1); 40 } 41 rep(i,1,num) c[i]=0; now=m; 42 per(i,n,1){ 43 while(now>=1&&q[now].pos==i) 44 q[now].g=qry(num-q[now].val+1)+1,now--; 45 upt(num+2-a[i],qry(num+1-a[i])+1); 46 } 47 rep(i,1,m){ 48 int res=q[i].f+q[i].g-1; 49 if(res>=lis) ans[q[i].id]=res; 50 else ans[q[i].id]=lis-k[q[i].pos]; 51 } 52 rep(i,1,m) cout<<ans[i]<<'\n'; 53 return 0; 54 }
四、写题心得:
对
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】