卿学姐与公主

卿学姐与公主

Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

某日,百无聊赖的卿学姐打开了某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

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

Sample Output
0
5

Hint

注意可能会爆int哦

//线段树,树状数组求最大值,模板题

树状数组

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 #define MX 100005
 5
 6 int n;
 7 LL A[MX];
 8 LL C[MX];
 9 int lowbit(int x){
10     return x&(-x);
11 }
12
13 void update(int p)
14 {
15     while (p<=n)
16     {
17         C[p]=A[p];
18         for (int i=1;i<lowbit(p);i<<=1)
19             C[p]=max(C[p],C[p-i]);
20         p+=lowbit(p);
21     }
22 }
23
24 LL query(int x,int y)
25 {
26     LL ret = 0;
27     while (y>=x)
28     {
29         ret = max(ret,A[y]);
30         y--;
31         while (y-lowbit(y)>=x)
32         {
33             ret = max (ret,C[y]);
34             y-=lowbit(y);
35         }
36     }
37     return ret;
38 }
39
40 int main()
41 {
42     while (scanf("%d",&n)!=EOF)
43     {
44         int q;
45         scanf("%d",&q);
46         memset(A,0,sizeof(A));
47         memset(C,0,sizeof(C));
48         while (q--)
49         {
50             int op;
51             scanf("%d",&op);
52             if (op==1)
53             {
54                 int p,x;
55                 scanf("%d%d",&p,&x);
56                 A[p]+=x;
57                 update(p);
58             }
59             else if (op==2)
60             {
61                 int x,y;
62                 scanf("%d%d",&x,&y);
63                 printf("%lld\n",query(x,y));
64             }
65         }
66     }
67     return 0;
68 }

线段树

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 #define MX 100005
 5 struct Node
 6 {
 7     int l,r;
 8     LL m;
 9 }tree[MX*4];
10 int n;
11
12 void Init(int l,int r,int k)
13 {
14     tree[k].l=l,
15     tree[k].r=r;
16     tree[k].m=0;
17     if (l==r) return ;
18
19     int mid = (l+r)>>1;
20     Init(l,mid,2*k);
21     Init(mid+1,r,2*k+1);
22 }
23
24 LL update(int l,int r,int k,int w)
25 {
26     if (l==tree[k].l&&tree[k].r==r)
27     {
28         tree[k].m+=w;
29         return tree[k].m;
30     }
31     int mid = (tree[k].l+tree[k].r)>>1;
32     if (r<=mid) update(l,r,2*k,w);
33     else if (l>=mid+1) update(l,r,2*k+1,w);
34     else update(l,mid,2*k,w),update(mid+1,r,2*k+1,w);
35     tree[k].m= max(tree[2*k].m,tree[2*k+1].m);
36     return tree[k].m;
37 }
38
39 LL query(int l,int r,int k)
40 {
41     if (tree[k].l==l&&tree[k].r==r)
42     {
43         return tree[k].m;
44     }
45     int mid = (tree[k].l+tree[k].r)>>1;
46     if (r<=mid) return query(l,r,2*k);
47     else if (l>=mid+1) return query(l,r,2*k+1);
48     return max(query(l,mid,2*k),query(mid+1,r,2*k+1));
49 }
50
51 int main()
52 {
53     int n;
54     while (scanf("%d",&n)!=EOF)
55     {
56         Init(1,n,1);
57         int q;
58         cin>>q;
59         while (q--)
60         {
61             int op;
62             scanf("%d",&op);
63             if(op==1)
64             {
65                 int q,x;
66                 scanf("%d%d",&q,&x);
67                 update(q,q,1,x);
68             }
69             else if (op==2)
70             {
71                 int x,y;
72                 scanf("%d%d",&x,&y);
73                 printf("%lld\n",query(x,y,1));
74             }
75         }
76     }
77     return 0;
78 }

时间: 2024-10-11 13:37:13

卿学姐与公主的相关文章

A - 卿学姐与公主(线段树+单点更新+区间极值)

A - 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了高山,跨过了大洋,卿学姐来到了魔王的第一道城关. 在这个城关面前的是魔王的精锐部队,这些士兵

hdu1324卿学姐与公主

地址:http://acm.uestc.edu.cn/#/problem/show/1324 卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了高山,跨过了大洋,卿学姐来到了魔王

UESTC - 1324 卿学姐与公主

题目链接 某日,百无聊赖的卿学姐打开了某11区的某魔幻游戏 在这个魔幻的游戏里,生活着一个美丽的公主,但现在公主被关押在了魔王的城堡中. 英勇的卿学姐拔出利刃冲向了拯救公主的道路. 走过了荒野,翻越了高山,跨过了大洋,卿学姐来到了魔王的第一道城关. 在这个城关面前的是魔王的精锐部队,这些士兵成一字排开. 卿学姐的武器每次只能攻击一个士兵,并造成一定伤害,卿学姐想知道某时刻从LL到RR这个区间内,从开始到现在累计受伤最严重的士兵受到的伤害. 最开始每个士兵的受到的伤害都是0 Input 第一行两个

CDOJ 1324 卿学姐与公主 分块

题目地址 分块模板 1 #include<cstdio> 2 #include<algorithm> 3 #include<math.h> 4 using namespace std; 5 const int Nmax=100005; 6 int num,block,l[Nmax],r[Nmax],n,q,belong[Nmax]; 7 long long Max[Nmax],a[Nmax]; 8 9 void build() 10 { 11 block=sqrt(n)

hdu1341卿学姐与城堡的墙

地址:http://acm.uestc.edu.cn/#/problem/show/1341 题目: 卿学姐与城堡的墙 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 卿学姐终于来到了魔王的城堡,城堡修建的十分壮观. 即使心中放不下公主,卿学姐还是忍不住驻足观赏这宏伟的建筑. 卿学姐注意到城堡的墙上有若干直线状的花纹. 可以将墙看做一个平面,卿学姐想

卿学姐与魔法(优先队列)

个人心得:思路很简单,不过就是会超时,而且直接用数组的话肯定不够大. 所以就用优先队列,让里面只装N个数就好了,然后再次添加时进行比较,比他小就放进去. 不过这样超时,所以先将A,B排序,然后只要比队首大就break就可以过了. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<string> 5 #include<queue> 6 #include<

hdu1344卿学姐种美丽的花

地址:http://acm.uestc.edu.cn/#/problem/show/1344 题目: 卿学姐种美丽的花 Time Limit: 8000/4000MS (Java/Others)     Memory Limit: 125535/65535KB (Java/Others) Submit Status 众所周知,在喵哈哈村,有一个温柔善良的卿学姐. 卿学姐喜欢和她一样美丽的花.所以卿学姐家的后院有很多的花坛. 卿学姐有nn个花坛,一开始第ii个花坛里有A[i]A[i]朵花.每过一段

B - 卿学姐与基本法 (离散化+成段更新+区间求和)

卿学姐与基本法 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status “做专题也要按照基本法” 离开了诡异的村庄,卿学姐来到了威廉·圣·乱七八糟王国,这里的国王咸鱼王是个智障. 国家涣散,盗贼四起,民不聊生. 见到这样的景象,卿学姐不禁潸然泪下,“悠悠苍天,奈何苦了苍生”. 自幼学习基本法的卿学姐决定向整个国家普及基本法,改善国家法度. 在这个国家总共有N

卿学姐与魔法

“你的膜法也救不了你 在去拯救公主的道路上,卿学姐披荆斩棘,刀刃早已锈迹斑斑. 一日卿学姐正在为武器的问题发愁,碰到了正在赏树的天行廖. 天行廖嘴角微扬,似乎看穿了卿学姐的心思,故意在此等待. “少年,你渴望掌握雷电的力量吗?”天行廖如是问道. 已经差不多是条咸鱼的卿学姐欣然答应了.于是卿学姐开始跟随魔法大师天行廖学习魔法的力量. 刚入门的卿学姐发现,每个魔法都是由两种基本元素构成的,A元素和B元素. 而每个魔法的魔力是合成这个魔法的A元素和B元素的大小的和. 例如一个大小为3的A元素和一个大小