国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hdu 1754 I Hate It 線段樹單點更新區間查詢

2019-11-11 01:48:59
字體:
來源:轉載
供稿:網友

題目:

I Hate It

Time Limit: 9000/3000 MS (java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 69414    Accepted Submission(s): 26895PRoblem Description很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫一個程序,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。 Input本題目包含多組測試,請處理到文件結束。在每個測試的第一行,有兩個正整數 N 和 M ( 0<N<=200000,0<M<5000 ),分別代表學生的數目和操作的數目。學生ID編號分別從1編到N。第二行包含N個整數,代表這N個學生的初始成績,其中第i個數代表ID為i的學生的成績。接下來有M行。每一行有一個字符 C (只取'Q'或'U') ,和兩個正整數A,B。當C為'Q'的時候,表示這是一條詢問操作,它詢問ID從A到B(包括A,B)的學生當中,成績最高的是多少。當C為'U'的時候,表示這是一條更新操作,要求把ID為A的學生的成績更改為B。 Output對于每一次詢問操作,在一行里面輸出最高成績。 Sample Input
5 61 2 3 4 5Q 1 5U 3 6Q 3 4Q 4 5U 2 9Q 1 5 Sample Output
5659HintHuge input,the C function scanf() will work better than cin

代碼:

#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<ctype.h>    //tower()#include<set>  #include<map>  #include<iomanip>// cout<<setprecision(1)<<fixed<<a;#include<vector>   #include<time.h>  #include<assert.h>  //assert#include<cmath>	#include<algorithm>#include<bitset>#include<limits.h>#include<stack>#include<queue>using namespace std;const int maxn=200010;const int inf=0x7fffffff;/*線段樹單點更新*/#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1int n,m,stree[maxn<<2];void build(int l,int r,int rt){//葉節點從l到r,樹根為rt	if(l==r){		scanf("%d",&stree[rt]);///stree[rt]=a[l];		return;	}	int mid=(l+r)>>1;	build(lson);//自左向右讀入a[]中數據 	build(rson);	stree[rt]=max(stree[rt<<1],stree[rt<<1|1]); }void update(int x,int v,int l,int r,int rt){//線段樹(樹根為rt,對應區間為[l,r])中x結點更新為v 	if(l==r){		stree[rt]=v;		return;	}	int mid=(l+r)>>1;	if(x<=mid) update(x,v,lson);	if(x>mid) update(x,v,rson);	stree[rt]=max(stree[rt<<1],stree[rt<<1|1]);}int query(int a,int b,int l,int r,int rt){//查詢線段樹(樹根為rt,對應區間為[l,r])中子區間[a,b]的最大值 	if(a<=l&&b>=r) return stree[rt];	int ans=-inf;	int mid=(l+r)>>1;	if(a<=mid) ans=max(query(a,b,lson),ans);	if(b>mid) ans=max(query(a,b,rson),ans);	return ans;}int main(){//1560MS	4696K	while(scanf("%d%d",&n,&m)==2){		memset(stree,0,sizeof(stree));		build(1,n,1);		char s[5];		int p,q;		while(m--){			scanf("%s%d%d",s,&p,&q);			if(s[0]=='U') update(p,q,1,n,1);			else printf("%d/n",query(p,q,1,n,1));		}	}	return 0;}


上一篇:6174

下一篇:win7 64位安裝tensorflow 12.0.1rc

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南漳县| 华蓥市| 沙坪坝区| 台湾省| 栾川县| 青铜峡市| 运城市| 抚州市| 治多县| 兴和县| 兴宁市| 肃宁县| 永春县| 顺昌县| 兴宁市| 阳谷县| 平江县| 临朐县| 长兴县| 锦州市| 秭归县| 建平县| 纳雍县| 扎鲁特旗| 巨野县| 镇康县| 巴林左旗| 诸城市| 景洪市| 张家川| 永宁县| 读书| 乐平市| 双辽市| 陵川县| 手游| 泉州市| 钟山县| 铜川市| 五河县| 永川市|