I Hate It
Time Limit: 9000/3000 MS (java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 70192 Accepted Submission(s): 27184
PRoblem Description 很多学校流行一种比较的习惯。老师们很喜欢询问,从某某到某某当中,分数最高的是多少。 这让很多学生很反感。
不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问。当然,老师有时候需要更新某位同学的成绩。
Input 本题目包含多组测试,请处理到文件结束。 在每个测试的第一行,有两个正整数 N 和 M ( 0
#include <iostream>#include <stdio.h>#include <string.h>using namespace std;int a[200005];int h[4*200005];int lowbit(int x){ return x&(-x);}void update(int k,int n){ while(k<=n){ h[k]=a[k]; int lx=lowbit(k); for(int i=1;i<lx;i<<=1){ h[k]=max(h[k],h[k-i]); } k+=lowbit(k); }}int query(int l,int r){ int ans=0; while(r>=l){ ans=max(ans,a[r]); r--; for(;r-lowbit(r)>=l;r-=lowbit(r)){ ans=max(ans,h[r]); } } return ans;}int main() { int n,m; while(~scanf("%d%d",&n,&m)){ memset(h,0,sizeof(h)); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++){ update(i,n); } char str[52]; while(m--){ int u,v; scanf("%s",str); scanf("%d%d",&u,&v); if(str[0]=='Q'){ int p=query(u,v); printf("%d/n",p); } else{ a[u]=v; update(u,n); } } } return 0;}新闻热点
疑难解答