線段樹單點更新

2021-06-23 00:26:59 字數 1894 閱讀 2457

g - 梔子花開

time limit:1000msmemory limit:32768kb64bit io format:%i64d & %i64u

submit

status

practice

fzu 1921

description

這是乙個梔子花開的季節,也是乙個離別的季節,四年一千多個日日夜夜,那校園的角角落落,留下了我們沉思的身影;那上百次的成績排名表,印證了我們深深淺淺不斷進步的軌跡,但是這些進步都離不開老師的諄諄教誨。

作為計算機系的學生,演算法與資料結構是必修的主幹課程,因此課程的每個老師都很關心每個學生的學習情況,每天下課老師都會給某個學生進行課外輔導。首先,老師會給每個學生乙個能力評定分數,如果有學生要求老師給他輔導,那老師就會專門給該同學進行課外輔導,如果沒有學生要求,老師就會給評定分數最低的同學課外輔導。老師給學生輔導後,學生的能力都會有所增長,然而不同的學生增長的情況都不同。老師想知道為學生課外輔導若干天後,全班的最低分學生的編號和分數。

input

首先第一行為t,表示有t組資料。接下來為每組資料的結構:

第一行有乙個數字n,表示有n個學生,編號從1到n。(1 <= n <= 10000)。

接下來一行有n個數,分別是編號從1到n的學生的初始能力水平xi,(1 <= xi

<= 1000)。

接下來有一行有乙個數m表示老師給學生課外輔導了m天(1 <= m <= 100000)。

接下來m行,每行兩個數(ai bi),表示老師在第i天給編號為ai同學補課,編號為ai的同學能力提高了bi(0 <= ai

<= n,1 <= bi

<= 1000)。如果ai為0,則表示老師今天給能力最差的學生輔導。如果最低分同時有多個學生,就給編號小的學生補課。

output

對於每組資料輸出一行先輸出組數(從1開始),接著最後輸出經過m天後,全班的最低分學生的編號和分數。

sample input

1

310 20 30

30 100

3 10

0 40

sample output

case 1: 3 40#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define lson l,m,rt<<1

#define rson m+1,r,rt<<1|1

const int maxn = 11111;

int num[maxn<<2];

int score[maxn<<2];

void pushup(int rt)

void build(int l,int r,int rt)

int m = (l+r)>>1;

build(lson);

build(rson);

pushup(rt);

}void update(int a,int b,int l,int r,int rt)

int m = (l+r)>>1;

if(a <= m)

else

pushup(rt);

}//int query()

int main()

update(a,b,1,n,1);

}printf("case %d: %d %d\n",cas,num[1],score[1]);

} }return 0;

}

線段樹單點更新

hdu 1166 單點更新,求區間和 第一次寫線段樹,照著大神的抄了一遍 include include include define max 50100 define mid l r 1 define lson l,m,rt 1 define rson m 1,r,rt 1 1 using nam...

線段樹(單點更新)

1.hdu 1166 敵兵布陣 單點更新,區間求和,最裸的線段樹 include include include using namespace std define maxn 50010 define lson l,m,rt 1 define rson m 1,r,rt 1 1 struct tr...

線段樹單點更新 求和

第一行乙個整數t,表示有t組資料。每組資料第一行乙個正整數n n 50000 表示敵人有n個工兵營地,接下來有n個正整數,第i個正整數ai代表第i個工兵營地里開始時有ai個人 1 ai 50 接下來每行有一條命令,命令有4種形式 1 add i j,i和j為正整數,表示第i個營地增加j個人 j不超過...