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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【BZOJ】3524 [POI2014] Couriers(主席树)

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ】3524 [POI2014] Couriers(主席树) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

傳送門:QWQ

傳送到洛谷QWQ

?

?

分析

?

把求區間第k大的改一改就ok了。

?

?

代碼

?

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=500010;
 4 int root[N*40], ls[N*40], rs[N*40], sum[N*40];
 5 int n, m, newp;
 6 
 7 void add(int l,int r,int x,int& cur,int cur1)
 8 {
 9     cur=++newp;
10     ls[cur]=ls[cur1]; rs[cur]=rs[cur1];  sum[cur]=sum[cur1]+1;
11     if(l==r) return; int mid=l+r>>1;
12     if(x<=mid) add(l,mid,x,ls[cur],ls[cur1]);
13     else add(mid+1,r,x,rs[cur],rs[cur1]);
14 }
15 
16 int query(int l,int r,int k,int cur,int cur1)
17 {
18     if(l==r) return l;
19     int mid=l+r>>1, cmp1=sum[ls[cur1]]-sum[ls[cur]], cmp2=sum[rs[cur1]]-sum[rs[cur]];
20     if(cmp1>k)  return query(l,mid,k,ls[cur],ls[cur1]);
21     else if(cmp2>k) return query(mid+1,r,k,rs[cur],rs[cur1]);
22     return 0;
23 }
24 
25 int main()
26 {
27     scanf("%d%d",&n,&m);
28     for(int i=1;i<=n;i++)
29     {
30         int x; scanf("%d",&x);
31         add(1,n,x,root[i],root[i-1]);
32     }
33     
34     for(int i=1;i<=m;i++)
35     {
36         int l,r; scanf("%d%d",&l,&r);
37         printf("%d\n",query(1,n,r-l+1>>1,root[l-1],root[r]));
38     }
39     return 0;
40 }

?

?


?

轉載于:https://www.cnblogs.com/noblex/p/8427502.html

總結

以上是生活随笔為你收集整理的【BZOJ】3524 [POI2014] Couriers(主席树)的全部內容,希望文章能夠幫你解決所遇到的問題。

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