日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu3308

發布時間:2025/5/22 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu3308 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

區間合并比較模板的題,就是求一個區間的LCIS

線段樹維護左最大LCIS,右最大LCIS,區間LCIS

看代碼就行

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define maxn 100005 int lval[maxn<<2],rval[maxn<<2];//????×óóò??μ??μ int lmx[maxn<<2],rmx[maxn<<2],mx[maxn<<2];//????×ó2àLCIS£?????óò2àLCIS£?????LCIS inline void pushup(int rt,int l,int r){lval[rt]=lval[rt<<1];rval[rt]=rval[rt<<1|1];//?üD?×óóò??μ?//?üD?×óóòLCISoíLCISlmx[rt]=lmx[rt<<1];//×ó??rmx[rt]=rmx[rt<<1|1];//óò??mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);int m=l+r>>1;int lenl=m-l+1,lenr=r-m;//×óóò×ó????3¤?èif(rval[rt<<1]<lval[rt<<1|1]){//o?2¢if(lmx[rt<<1]==lenl)lmx[rt]+=lmx[rt<<1|1];if(rmx[rt<<1|1]==lenr)rmx[rt]+=rmx[rt<<1];mx[rt]=max(mx[rt],rmx[rt<<1]+lmx[rt<<1|1]);}mx[rt]=max(mx[rt],max(lmx[rt],rmx[rt])); } void build(int l,int r,int rt){if(l==r){scanf("%d",&lval[rt]);rval[rt]=lval[rt];lmx[rt]=rmx[rt]=mx[rt]=1;return;}int m=l+r>>1;build(lson);build(rson);pushup(rt,l,r); } void update(int pos,int c,int l,int r,int rt){if(l==r){lval[rt]=rval[rt]=c;return;}int m=l+r>>1;if(pos<=m) update(pos,c,lson);else if(pos>m) update(pos,c,rson);pushup(rt,l,r); } int query(int L,int R,int l,int r,int rt){if(L<=l && R>=r){return mx[rt];}int m=l+r>>1;if(R<=m) return query(L,R,lson);//è?1?[L,R]?ú×ó????else if(L>m) return query(L,R,rson);else {//μ?á???????à?2é?òint temp1=query(L,R,lson);int temp2=query(L,R,rson);int temp3=0;if(rval[rt<<1]<lval[rt<<1|1]){temp3+=min(m-L+1,rmx[rt<<1]);temp3+=min(R-m,lmx[rt<<1|1]);}/*return max(temp3,max(temp1,temp2));*///??óúá???×ó????£???óDèy???é??×÷?a×????á1?£?ò?ê?×ó????μ?LCIS£??tê?óò????μ?LCIS£?èyê?o?2¢oó?D??μ???ò???return max(max(temp1,temp2),temp3);} }int main(){int T,n,q;scanf("%d",&T);while(T--){scanf("%d%d",&n,&q);build(0,n-1,1);int a,b;char op[2];while(q--){scanf("%s%d%d",op,&a,&b);if(op[0]=='Q') printf("%d\n",query(a,b,0,n-1,1));else update(a,b,0,n-1,1);}}return 0; }

?

轉載于:https://www.cnblogs.com/zsben991126/p/9971648.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的hdu3308的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。