国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

CDOJ 1324 卿學姐與公主 分塊法

2019-11-08 01:45:59
字體:
來源:轉載
供稿:網友

某日,百無聊賴的卿學姐打開了某11區的某魔幻游戲

在這個魔幻的游戲里,生活著一個美麗的公主,但現在公主被關押在了魔王的城堡中。

英勇的卿學姐拔出利刃沖向了拯救公主的道路。

走過了荒野,翻越了高山,跨過了大洋,卿學姐來到了魔王的第一道城關。

在這個城關面前的是魔王的精銳部隊,這些士兵成一字排開。

卿學姐的武器每次只能攻擊一個士兵,并造成一定傷害,卿學姐想知道某時刻從L 到R

這個區間內,從開始到現在累計受傷最嚴重的士兵受到的傷害。

最開始每個士兵的受到的傷害都是0 Input

第一行兩個整數N,Q 表示總共有N個士兵編號從1到N,和Q

個操作。

接下來Q 行,每行三個整數,首先輸入一個t,如果t是1,那么輸入p,x,表示卿學姐攻擊了p這個位置的士兵,并造成了x的傷害。如果t是2,那么輸入L,R,表示卿學姐想知道現在[L,R]

閉區間內,受傷最嚴重的士兵受到的傷害。

1≤N≤100000

1≤Q≤100000

1≤p≤N

1≤x≤100000

1≤L≤R≤N

Output

對于每個詢問,回答相應的值 Sample input and output Sample Input Sample Output

5 4 2 1 2 1 2 4 1 3 5 2 3 3

0 5

解題方法: 復習分塊,從明天開始開一個分塊法的專題,給代碼吧,講解在blibli上有,模仿qsc寫的。

#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+7;int belong[maxn], num, l[maxn], r[maxn];int n, q, block;long long a[maxn], Max[maxn];//num 分塊的個數//block 塊的大小//belong[i]表示i屬于哪一塊//l[i]表示i這塊的左端點位置//r[i]表示i這塊的右端點位置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++){ belong[i] = (i - 1)/block + 1; } for(int i = 1; i <= num; i++){ for(int j = l[i]; j <= r[i]; j++){ Max[i] = max(Max[i], a[j]); } }}void update(int x, int y){ a[x] += y; Max[belong[x]] = max(Max[belong[x]], a[x]);}long long query(int x, int y){ long long ans = 0; if(belong[x] == belong[y]){ for(int i = x; i <= y; i++){ ans = max(ans, a[i]); } return ans; } for(int i = x; i <= r[belong[x]]; i++){ ans = max(ans, a[i]); } for(int i = belong[x] + 1; i < belong[y]; i++){ ans = max(ans, Max[i]); } for(int i = l[belong[y]]; i <= y; i++){ ans = max(ans, a[i]); } return ans;}int main(){ scanf("%d%d", &n, &q); for(int i = 1; i <= q; i++){ int op, l, r; scanf("%d%d%d", &op, &l, &r); if(op == 1) update(l, r); else
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昔阳县| 革吉县| 肇州县| 甘洛县| 通江县| 韶山市| 汝南县| 壶关县| 三亚市| 富平县| 钟山县| 黄浦区| 鄂尔多斯市| 黄大仙区| 渭南市| 达尔| 湘潭市| 乐都县| 漠河县| 来凤县| 分宜县| 息烽县| 大城县| 长兴县| 广宁县| 乌恰县| 娄烦县| 裕民县| 上杭县| 遵化市| 平阳县| 榆中县| 新乡县| 铁力市| 凯里市| 杭锦旗| 阜平县| 开江县| 临桂县| 民勤县| 武清区|