題目連接php
ac代碼(注意字符讀入前須要注意回車的影響)ios
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<bitset> #include<cassert> #include<cctype> #include<cmath> #include<cstdlib> #include<ctime> #include<deque> #include<iomanip> #include<list> #include<map> #include<queue> #include<set> #include<stack> #include<vector> #define mp make_pair #define pi acos(-1) #define pii pair<int, int> #define pll pair<long long , long long> #define ll long long #define ld long double #define MEMS(x) memset(x, -1, sizeof(x)) #define MEM(x) memset(x, 0, sizeof(x)) const int inf = 0x3f3f3f3f; const int maxn = 200005; using namespace std; int N, M; int s, c[maxn], d[maxn]; char order; int lowbit(int x) { return x & (-x); } void update(int x) { while(x <= N) { d[x] = c[x]; int lx = lowbit(x); for(int i = 1; i < lx; i <<= 1) d[x] = max(d[x], d[x - i]); x += lowbit(x); } } int getmax(int l, int r) { int ans = 0; while(r >= l) { ans = max(ans, c[r]); --r; while(r - lowbit(r) >= l) { ans = max(ans, d[r]); r -= lowbit(r); } } return ans; } int main() { // freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); while(scanf("%d %d", &N, &M) != EOF) { memset(d, 0, sizeof(d)); for(int i = 1; i <= N; i++) { scanf("%d", &c[i]); update(i); } int a, b; while(M--) { getchar(); scanf("%c %d %d", &order, &a, &b); if(order == 'U') { c[a] = b; update(a); } else if(order == 'Q') printf("%d\n", getmax(a, b)); } } }