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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【牛客 - 157C】PH试纸(前缀和,或权值线段树,主席树)

發(fā)布時(shí)間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【牛客 - 157C】PH试纸(前缀和,或权值线段树,主席树) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題干:

鏈接:https://ac.nowcoder.com/acm/contest/157/C
來源:牛客網(wǎng)

題目描述

????PH試紙,是一種檢測(cè)酸堿度的試紙,試紙紅色為酸性,藍(lán)色為堿性。

????HtBest有一個(gè)PH試紙,試紙被分成了n段,每一段都可以被染色成紅色或者藍(lán)色,WHZ在試紙的每一段上都染為一種顏色,HtBest有m個(gè)詢問,對(duì)于每個(gè)詢問,Ta想知道某種顏色第qi次在什么地方出現(xiàn)。

輸入描述:

第一行有兩個(gè)正整數(shù)n,m。 第二行有n個(gè)字母(‘R’或’B’),每個(gè)第i個(gè)字母表示PH試紙第i段的顏色。 接下來m行,第i行有一個(gè)大寫字母 ci(‘R’或’B’)和一個(gè)正整數(shù)qi ,用空格隔開,表示查詢顏色ci 第qi 次出現(xiàn)的位置。

輸出描述:

共m行,第i行一個(gè)整數(shù),表示查詢結(jié)果,若顏色ci出現(xiàn)次數(shù)少于qi次,則輸出-1,否則輸出顏色qi第ci次出現(xiàn)的位置。

示例1

輸入

復(fù)制

2 2 RB R 1 B 1

輸出

復(fù)制

1 2

示例2

輸入

復(fù)制

2 2 BB R 1 B 2

輸出

復(fù)制

-1 2

示例3

輸入

復(fù)制

3 3 BRB B 1 B 2 R 1

輸出

復(fù)制

1 3 2

備注:

對(duì)于100%的測(cè)試數(shù)據(jù): 1 ≤ n, m ≤ 1000000 所有輸入數(shù)據(jù)不超過1000000。 數(shù)據(jù)量較大,注意使用更快的輸入輸出方式。

解題報(bào)告:

? 直接維護(hù)兩個(gè)前綴和,復(fù)雜度O(m)。

AC代碼:

#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair using namespace std; const int MAX = 2e6 + 5; int n,m; char s[MAX]; int R[MAX],B[MAX],r,b; int main() {cin>>n>>m;scanf("%s",s+1);getchar();memset(R,-1,sizeof R);memset(B,-1,sizeof B);for(int i = 1; i<=n; i++) {if(s[i] == 'R') R[++r] = i;if(s[i] == 'B') B[++b] = i;}char ch[4];int x;while(m--) {scanf("%s%d",ch,&x);if(ch[0] == 'R') printf("%d\n",R[x]);else printf("%d\n",B[x]);}return 0 ; }

進(jìn)一步擴(kuò)展:如果是1e5種顏色呢?? 答:那也很簡(jiǎn)單啊1e5個(gè)vector就完事了。?

再一步擴(kuò)展:如果兩種顏色帶修改呢?? 答:那就建兩棵線段樹,對(duì)應(yīng)位置如果是當(dāng)前線段樹維護(hù)的顏色, 那就置為1 ,然后查詢第k大。

終極擴(kuò)展:那如果是1e5種顏色帶修改呢?? 答:那就主席樹。每種顏色都建一棵4*n這么大的線段樹,因?yàn)橥瑯?gòu)?所以壓縮到一棵主席樹里,查詢就找該顏色對(duì)應(yīng)的線段樹?在線段樹上二分,線段樹上維護(hù)的是?是該樹維護(hù)的顏色則該點(diǎn)記為1?其他顏色記為0。(%%%syt)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的【牛客 - 157C】PH试纸(前缀和,或权值线段树,主席树)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。