标签:mit color 需要 php pos 测试 tput har 解题思路
Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 81735 Accepted Submission(s): 31442
题目大意:字面意思。。
解题思路:线段树模板。要求有两个:点的值变化,求区间和。直接套模板即可
#include <cstdio> #include <algorithm> using namespace std; const int N=200005; const int maxn = N*3; int val[maxn],a[maxn]; int n,m,ql,qr,pos,value; void build(int num,int l,int r) { if(l==r) { val[num] = a[l]; return ; } int mid = (l+r)/2; build(num*2,l,mid); build(num*2+1,mid+1,r); val[num] = max(val[num*2],val[num*2+1]); } int Findmax(int num,int l,int r) { int mid=(l+r)/2; int ans = 0; if(ql<=l&&qr>=r) { return val[num]; } else { if(mid>=ql) ans = max(ans,Findmax(num*2,l,mid)); if(mid<qr) ans = max(ans,Findmax(num*2+1,mid+1,r)); } return ans; } void updata(int num,int l,int r) { if(l==r) { val[num] = value; return ; } int mid = (l+r)/2; if(mid>=pos) { updata(num*2,l,mid); } else { updata(num*2+1,mid+1,r); } val[num] = max(val[num*2],val[num*2+1]); } int main() { while(scanf("%d %d",&n,&m)!=EOF) { for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } build(1,1,n); int A,B;char c; for(int i=1;i<=m;i++) { getchar(); scanf("%c %d %d",&c,&A,&B); if(c==‘Q‘) { ql = A; qr = B; printf("%d\n",Findmax(1,1,n)); } else { pos = A; value = B; updata(1,1,n); } } } }
HDU-1754 I Hate It(线段树、点变化+段查询---模板)
标签:mit color 需要 php pos 测试 tput har 解题思路
原文地址:http://www.cnblogs.com/WWkkk/p/7366579.html