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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

杭电多校第四场-H-K-th Closest Distance

發布時間:2025/10/17 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杭电多校第四场-H-K-th Closest Distance 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

You have an array: a1, a2, , an and you must answer for some queries.
For each query, you are given an interval [L, R] and two numbers p and K. Your goal is to find the Kth closest distance between p and aL, aL+1, ..., aR.
The distance between p and ai is equal to |p - ai|.
For example:
A = {31, 2, 5, 45, 4 } and L = 2, R = 5, p = 3, K = 2.
|p - a2| = 1, |p - a3| = 2, |p - a4| = 42, |p - a5| = 1.
Sorted distance is {1, 1, 2, 42}. Thus, the 2nd closest distance is 1.

輸入

The first line of the input contains an integer T (1 <= T <= 3) denoting the number of test cases.
For each test case:
The first line contains two integers n and m (1 <= n, m <= 10^5) denoting the size of array and number of queries.
The second line contains n space-separated integers a1, a2, ..., an (1 <= ai <= 10^6). Each value of array is unique.
Each of the next m lines contains four integers L', R', p' and K'.
From these 4 numbers, you must get a real query L, R, p, K like this:?
L = L' xor X, R = R' xor X, p = p' xor X, K = K' xor X, where X is just previous answer and at the beginning, X = 0.
(1 <= L < R <= n, 1 <= p <= 10^6, 1 <= K <= 169, R - L + 1 >= K).

輸出

For each query print a single line containing the Kth closest distance between p and aL, aL+1, ..., aR.

樣例輸入

1 5 2 31 2 5 45 4 1 5 5 1 2 5 3 2

樣例輸出

0 1
題意 給一個序列A,每次詢問L,R,p,k,輸出[L,R]區間中第k大的|p-a[i]| 思路 二分答案,查詢[L,R]中[p-mid,p+mid]的數的個數 可以用主席樹/歸并樹維護區間x,y之間數的個數(題解說還可以用線段樹) 主席樹O(mlog1e6logn) 歸并樹O(mlog1e6logn^2)
歸并樹:https://www.cnblogs.com/bennettz/p/8342242.html #include <bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+10; int T,n,m; int a[N],t[20][N]; int read() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } void build(int s,int l,int r) {if (l==r){t[s][l]=a[l];return;}int mid=(l+r)>>1;build(s+1,l,mid); build(s+1,mid+1,r);for (int i=l,j=mid+1,k=l;i<=mid||j<=r;){if (j>r) t[s][k++]=t[s+1][i++];else if (i>mid || t[s+1][i]>t[s+1][j]) t[s][k++]=t[s+1][j++];else t[s][k++]=t[s+1][i++];} } int query(int s,int l,int r,int L,int R,int x,int y) {if (x>y ) return 0;if (L<=l&r<=R){//printf("x=%d,y=%d,l=%d,r=%d,>y=%d,>=x=%d\n",x,y,l,r,upper_bound(t[s]+l,t[s]+r+1,y),upper_bound(t[s]+l,t[s]+r+1,x));return upper_bound(t[s]+l,t[s]+r+1,y)-lower_bound(t[s]+l,t[s]+r+1,x);}int mid=(l+r)>>1,ans=0;if (L<=mid) ans+=query(s+1,l,mid,L,R,x,y);if (R>mid) ans+=query(s+1,mid+1,r,L,R,x,y);return ans; } int main() {// freopen("14162.in","r",stdin);// freopen("1.out","w",stdout);T=read();while(T--){n=read(); m=read();//memset(t,0,sizeof(t));for (int i=1;i<=n;i++) a[i]=read();build(0,1,n);int ans=0;int L,R,p,k;while (m--){L=read(); R=read(); p=read(); k=read();L^=ans; R^=ans; p^=ans; k^=ans;int l=0,r=1000005;while (l<=r){int mid=(l+r)>>1;//cout<<mid<<endl;if (query(0,1,n,L,R,p-mid,p+mid)>=k) ans=mid,r=mid-1;else l=mid+1;}printf("%d\n",ans);}}// fclose(stdin);// fclose(stdout);return 0; } 歸并樹 #include <bits/stdc++.h> using namespace std; const int N=1e5+10; int ls[N*21],rs[N*21],s[N*21],root[N]; int a[N],b[N]; int T,n,m,sz; int read() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f; } void Insert(int l,int r,int x,int &y,int v) {y=++sz;s[y]=s[x]+1;if (l==r) return;ls[y]=ls[x]; rs[y]=rs[x];int mid=(l+r)>>1;if (v<=mid) Insert(l,mid,ls[x],ls[y],v);else Insert(mid+1,r,rs[x],rs[y],v); } int query(int l,int r,int L,int R,int x,int y) {if (L<=l&&r<=R) return s[y]-s[x];int ret=0;int mid=(l+r)>>1;if (L<=mid) ret+=query(l,mid,L,R,ls[x],ls[y]);if (R>mid) ret+=query(mid+1,r,L,R,rs[x],rs[y]);return ret; }int main() {T=read();while(T--){sz=0;n=read(); m=read();for (int i=1;i<=n;i++) a[i]=read(),b[i]=a[i];sort(b+1,b+1+n);int cnt=unique(b+1,b+1+n)-b-1;for (int i=1;i<=n;i++){a[i]=lower_bound(b+1,b+1+cnt,a[i])-b+1;Insert(1,N,root[i-1],root[i],a[i]);}int ans=0;int L,R,p,k;while (m--){L=read(); R=read(); p=read(); k=read();L^=ans,R^=ans,p^=ans,k^=ans;int l=0,r=1000006;while (l<=r){int mid=(l+r)>>1;int ll=lower_bound(b+1,b+1+cnt,p-mid)-b+1;int rr=upper_bound(b+1,b+1+cnt,p+mid)-b;if (query(1,N,ll,rr,root[L-1],root[R])>=k) ans=mid,r=mid-1;else l=mid+1;}printf("%d\n",ans);}}return 0; } 主席樹

?

?

轉載于:https://www.cnblogs.com/tetew/p/11286580.html

總結

以上是生活随笔為你收集整理的杭电多校第四场-H-K-th Closest Distance的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91成人在线观看喷潮动漫 | 日本黄网在线观看 | 人妻体内射精一区二区 | 国产乱国产乱 | 日韩伊人久久 | 美女屁股网站 | 成人a级网站 | 亚洲欧洲精品在线 | 在线免费成人 | 欧美精品在线观看一区二区 | 一级片www| 国产第一页屁屁影院 | 超碰97国产在线 | 日日狠狠久久偷偷四色综合免费 | 欧美视频三区 | 欧美色久| 日韩大胆人体 | 亚洲一级黄色大片 | 日本欧美亚洲 | 性xxxx视频| 国产欧美一区二区三区沐欲 | 2020亚洲天堂| 自拍第一页| 人妻在卧室被老板疯狂进入 | 伊人色区 | 大乳丰满人妻中文字幕日本 | 国产精品视频免费在线观看 | 2019天天干 | 色婷婷色婷婷 | www.av日韩 | 久久亚洲欧洲 | 丝袜 中出 制服 人妻 美腿 | 少妇饥渴难耐 | 欧美精品黑人猛交高潮 | 综合久久综合 | 3o一40一50一6o女人毛片 | 欧美综合亚洲图片综合区 | 日本三级在线 | 国产社区在线 | 熟女少妇内射日韩亚洲 | 国产偷亚洲偷欧美偷精品 | 蜜桃av在线播放 | 国产亚洲色婷婷久久99精品 | 女人久久 | √8天堂资源地址中文在线 欧美精品在线一区二区 | 亚洲天堂免费视频 | 黄色特级网站 | 狼人综合伊人 | 精品久久久视频 | 九九精品国产 | 亚洲欧美激情精品一区二区 | 嫩草影院av | 人妻无码一区二区三区久久99 | 欧美人与性禽动交精品 | 日韩一级免费片 | 国产宾馆自拍 | 国产美女一级视频 | 日韩高清国产一区在线 | 性欧美在线 | 国产一区二区三区网站 | 日韩簧片在线观看 | 亚洲欧美91 | 日本a v在线播放 | 一区www | 一区二区视频网站 | 一区二区视频在线 | 欧美aaaaaaaaa | 午夜67194| 黄视频网站在线看 | 午夜电影在线播放 | 欧美放荡办公室videos4k | 欧美日韩五月天 | 国产一区二区三区 | www.伊人网 | 波多野结衣在线视频免费观看 | 999这里有精品 | 久草免费资源站 | 亚洲九九九九 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 久久天堂精品 | 日操干| va免费视频 | 亚洲黄一区 | 天天摸天天摸 | 玩弄白嫩少妇xxxxx性 | 精品视频在线观看免费 | 欧美成人一区二免费视频软件 | 污视频网站免费在线观看 | 色播网址| 亚洲性精品 | 97超碰总站 | 亚洲欧美日韩综合在线 | 国产乱码一区二区三区在线观看 | 手机在线观看av片 | 射进来av影视 | 亚洲 欧美 自拍偷拍 | 久久叉 | 香蕉成人网 | 无套内谢的新婚少妇国语播放 |