HDU【1166】敌兵布阵(分块做法)

#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e4 + 5;
int T, n, num, block;///num->块数,block->块的大小
int l[maxn], r[maxn], in[maxn], a[maxn], sum[maxn];
///l->块的左边界,r->块的右边界,in->当前索引属于哪个块

void Build(){
    block = sqrt(n);
    num = n/ block; if(n % block) num++;
    for(int i = 1; i <= num; i++)
        l[i] = (i - 1) * block + 1, r[i] = i * block;
    r[num] = n;
    for(int i = 1; i <= n; i++)
        in[i] = (i - 1) / block + 1;
    for(int i = 1; i <= num; i++)
        for(int j = l[i]; j <= r[i]; j++)
            sum[i] += a[j];
}

void UpDate(int x, int y){
    a[x] += y; sum[in[x]] += y;
}

int Query(int x, int y){
    int ans = 0;
    if(in[x] == in[y]){
        for(int i = x; i <= y; i++)
            ans += a[i];
        return ans;
    }
    for(int i = x; i <= r[in[x]]; i++)
        ans += a[i];
    for(int i = in[x] + 1; i < in[y]; i++)
        ans += sum[i];
    for(int i = l[in[y]]; i <= y; i++)
        ans += a[i];
    return ans;
}

int main(){
    scanf("%d", &T);
    for(int t = 1; t <= T; t++){
        printf("Case %d:\n", t);
        memset(sum, 0, sizeof(sum));
        scanf("%d", &n);
        for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
        Build();
        char str[10];
        while(~scanf("%s", str) && str[0] != 'E'){
            int x, y;
            scanf("%d%d", &x, &y);
            if(str[0] == 'Q') printf("%d\n", Query(x, y));
            else if(str[0] == 'A') UpDate(x, y);
            else UpDate(x, -y);
        }
    }

    return 0;
}
/*
* ┌───┐   ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
* │Esc│   │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│  ┌┐    ┌┐    ┌┐
* └───┘   └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘  └┘    └┘    └┘
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐
* │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │Num│ / │ * │ - │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │   │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter  │               │ 4 │ 5 │ 6 │   │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐     ├───┼───┼───┼───┤
* │ Shift  │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│  Shift   │     │ ↑ │     │ 1 │ 2 │ 3 │   │
* ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││
* │ Ctrl│ Win│ Alt│         Space         │ Alt│ Win│Menu│Ctrl│ │ ← │ ↓ │ → │ │   0   │ . │←─┘│
* └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘
*/

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11113次浏览 95人参与
# 你的实习产出是真实的还是包装的? #
1961次浏览 42人参与
# MiniMax求职进展汇总 #
24129次浏览 309人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7654次浏览 43人参与
# 简历第一个项目做什么 #
31755次浏览 341人参与
# 重来一次,我还会选择这个专业吗 #
433564次浏览 3926人参与
# 米连集团26产品管培生项目 #
6043次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187227次浏览 1122人参与
# 牛客AI文生图 #
21453次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152462次浏览 888人参与
# 研究所笔面经互助 #
118968次浏览 577人参与
# 简历中的项目经历要怎么写? #
310383次浏览 4219人参与
# AI时代,哪些岗位最容易被淘汰 #
63869次浏览 828人参与
# 面试紧张时你会有什么表现? #
30517次浏览 188人参与
# 你今年的平均薪资是多少? #
213151次浏览 1039人参与
# 你怎么看待AI面试 #
180168次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64335次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76550次浏览 374人参与
# 我的求职精神状态 #
448149次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363536次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160684次浏览 1112人参与
# 校招笔试 #
471255次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务