标签:
http://acm.hdu.edu.cn/showproblem.php?pid=4027
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 14057 Accepted Submission(s): 3264
虽然这个过了而且也写过题解。但是还是再写一次。
因为:
它输入的区间L和R大小可能不是固定的L < R,要手动判定一下。
那么我以后做题,也要这样。因为我遇过太多这些坑了。
无论数据有没有,我都判定一下
#include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define inf (0x3f3f3f3f) typedef long long int LL; #include <iostream> #include <sstream> #include <vector> #include <set> #include <map> #include <queue> #include <string> #define lson L, mid, cur << 1 #define rson mid + 1, R, cur << 1 | 1 const int maxn = 100000 + 20; LL sum[maxn << 2]; bool book[maxn << 2]; void pushUp(int cur) { sum[cur] = sum[cur << 1] + sum[cur << 1 | 1]; book[cur] = book[cur << 1] && book[cur << 1 | 1]; } void build(int L, int R, int cur) { book[cur] = 0; if (L == R) { cin >> sum[cur]; return ; } int mid = (L + R) >> 1; build(lson); build(rson); pushUp(cur); } void upDate(int begin, int end, int L, int R, int cur) { if (book[cur]) return; if (L == R) { sum[cur] = sqrt(sum[cur]); if (sum[cur] == 1) book[cur] = 1; return; } int mid = (L + R) >> 1; if (begin <= mid) upDate(begin, end, lson); if (end > mid) upDate(begin, end, rson); pushUp(cur); } LL query(int begin, int end, int L, int R, int cur) { if (L >= begin && R <= end) { return sum[cur]; } int mid = (L + R) >> 1; LL ans = 0; if (begin <= mid) ans += query(begin, end, lson); if (end > mid) ans += query(begin, end, rson); return ans; } int f; int n; void work() { printf("Case #%d:\n", ++f); build(1, n, 1); int q; cin >> q; for (int i = 1; i <= q; ++i) { int flag, L, R; scanf("%d%d%d", &flag, &L, &R); if (L > R) swap(L, R); if (flag == 0) upDate(L, R, 1, n, 1); else { cout << query(L, R, 1, n, 1) << endl; } } } int main() { #ifdef local freopen("data.txt","r",stdin); #endif while (scanf("%d", &n) != EOF) { work(); printf("\n"); } return 0; }
HDU 1027 G - Can you answer these queries?
标签:
原文地址:http://www.cnblogs.com/liuweimingcprogram/p/5966608.html