<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      CF1862G 題解

      首先這個查詢操作很迷,考慮先化簡查詢操作。

      不難發現由于每次是加上一個逆的等差序列,因此一次操作完每個數與它的前驅之差一定會減少,因此加上等差序列的次數就等于全局每個數與它的前驅之差最大值。

      又因為會排序去重,所以最后剩下來的數一定是最開始的數一路加過來的,至此我們發現答案就是全局每個數與它的前驅之差最大值加上全局最大值。

      考慮怎么維護這個東西,顯然可以使用 FHQ treap 維護這件事,我們需要維護子樹最大差,最小值,最大值就可以合并信息,在點修時先把原來的數刪掉,在插入新的數。

      時間復雜度 \(O(n \log n)\)

      #include<bits/stdc++.h>
      using namespace std;
      const int maxn = 2e5+114;
      int n,q;
      int a[maxn];
      struct Node{
      	int val,ls,rs,w,mx,mi,ans;
      }treap[maxn];
      stack<int> brush;
      int tot;
      int rt;
      int clone(int w){
      	int New;
          if(brush.size()>0) New=brush.top(),brush.pop();
          else New=++tot;
      	treap[New].val=rand();
      	treap[New].ls=0;
      	treap[New].rs=0;
      	treap[New].w=w;
      	treap[New].mi=treap[New].mx=w;
      	treap[New].ans=0;
      	return New;
      }
      inline void pushup(int cur){
      	treap[cur].ans=0;
      	treap[cur].ans=max(treap[treap[cur].ls].ans,treap[treap[cur].rs].ans);
      	if(treap[cur].ls!=0) treap[cur].ans=max(treap[cur].w-treap[treap[cur].ls].mx,treap[cur].ans);
      	if(treap[cur].rs!=0) treap[cur].ans=max(treap[treap[cur].rs].mi-treap[cur].w,treap[cur].ans);
      	treap[cur].mx=treap[cur].mi=treap[cur].w;
      	if(treap[cur].rs!=0) treap[cur].mx=treap[treap[cur].rs].mx;
      	if(treap[cur].ls!=0) treap[cur].mi=treap[treap[cur].ls].mi;
      }
      inline int merge(int x,int y){
          if(!x||!y) return x+y;
          if(treap[x].val<treap[y].val){
              treap[x].rs=merge(treap[x].rs,y);
              pushup(x);
              return x;
          }
          else{
              treap[y].ls=merge(x,treap[y].ls);
              pushup(y);
              return y;
          }
      }
      inline void split(int cur,int x,int &l,int &r) {
      	if(cur==0){
      		l=r=0;
      		return ;
      	}
      	if(treap[cur].w>x){
      		r=cur;
      		split(treap[cur].ls,x,l,treap[cur].ls);
      	}
      	else{
      		l=cur;
      		split(treap[cur].rs,x,treap[cur].rs,r);
      	}
      	pushup(cur);
      }
      void dfs(int u){
      	if(u==0) return ;
      	dfs(treap[u].ls);
      	cout<<treap[u].w<<' '<<treap[u].mx<<' '<<treap[u].mi<<'\n';
      	dfs(treap[u].rs);
      }
      void insert(int w){
      	int x=0,y=0,z=0;
      	split(rt,w,x,z);
      	y=clone(w);
      	rt=merge(x,merge(y,z));
      }
      void erase(int w){
      	int x=0,y=0,z=0;
      	split(rt,w-1,x,y);
      	split(y,w,y,z);
          brush.push(y);
      	y=merge(treap[y].ls,treap[y].rs);
      	rt=merge(x,merge(y,z));
      }
      void work(){
      	rt=tot=0;
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      		insert(a[i]); 
      	}
      	cin>>q;
      	while(q--){
      		int x,y;
      		cin>>x>>y;
      		erase(a[x]);
      		a[x]=y;
      		insert(a[x]);
      		cout<<treap[rt].mx+treap[rt].ans<<' ';
      	}
      	cout<<'\n';
      }
      int T;
      int main(){
      	ios::sync_with_stdio(0);
      	cin.tie(0);
      	cout.tie(0);
      	cin>>T;
      	while(T--)work();
      }
      
      posted @ 2024-02-27 18:12  ChiFAN鴨  閱讀(24)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲AV永久中文无码精品综合| 成人精品一区二区三区四| 国产情侣激情在线对白| 男女xx00xx的视频免费观看| 少妇人妻偷人精品免费| 久久99精品久久久久久| 久久亚洲女同第一区综合| 国产激情一区二区三区午夜| 国产毛片三区二区一区| 久热综合在线亚洲精品| 久久香蕉国产线看观看猫咪av| 大地资源免费视频观看| 亚洲色偷偷色噜噜狠狠99| 激情六月丁香婷婷四房播| 亚洲av色图一区二区三区| 亚洲激情一区二区三区在线| 欧美和黑人xxxx猛交视频| 国产一区二区三区免费观看| 亚洲中文精品一区二区| 99视频偷窥在线精品国自产拍| 人禽无码视频在线观看| 真人无码作爱免费视频| 国产日产免费高清欧美一区| 婷婷99视频精品全部在线观看| 久热这里只国产精品视频| 国产成人精品一区二区| 开平市| 高清无打码一区二区三区| 亚洲线精品一区二区三区| 亚洲精品不卡av在线播放 | 成年女人碰碰碰视频播放| 宽甸| 久色伊人激情文学你懂的| 久久99精品久久久久久9| 久久精品蜜芽亚洲国产av | 日韩精品中文字幕第二页| 五月丁香六月综合缴清无码| 国产精品久久久国产盗摄| 亚洲乱码中文字幕小综合| 伊人久久大香线蕉综合影院首页| 国产蜜臀久久av一区二区|