LOJ 10127 -「一本通 4.3 练习 1」最大数
题面
题目描述
给定一个正整数数列 $a_1, a_2, a_3, \dots , a_n$,每一个数都在 0~p-1之间。可以对这列数进行两种操作:
- 添加操作:向序列后添加一个数,序列长度变成 n+1;
- 询问操作:询问这个序列中最后 L 个数中最大的数是多少。
程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的答案。
输入格式
第一行有两个正整数 m,p,意义如题目描述;
接下来 m 行,每一行表示一个操作。如果该行的内容是 Q L
,则表示这个操作是询问序列中最后 L 个数的最大数是多少;如果是 A t
,则表示向序列后面加一个数,加入的数是 $(t+a) mod p$ 。其中,t 是输入的参数,a 是在这个添加操作之前最后一个询问操作的答案(如果之前没有询问操作,则 a = 0)。
第一个操作一定是添加操作。对于询问操作,L>0 且不超过当前序列的长度。
输出格式
对于每一个询问操作,输出一行。该行只有一个数,即序列中最后 LL 个数的最大数。
思路
开一棵线段树,长度先设大一点(最好设成 Add 操作次数,但因为这道题 512M 内存,就随便开大乱搞了),用 r 来记录当前的序列长度,然后每次 add 操作的时候就 r++,然后修改 r 这个点。Query 操作的时候就查询 $[r-L+1,r]$ 这段区间的最大值并记录为 a。
代码
#include<bits/stdc++.h>
using namespace std;
struct node{
int l,r,mx;
}tr[5000005];
void upd(int x){
tr[x].mx=max(tr[x*2].mx,tr[x*2+1].mx);
}
void build_tree(int x,int l,int r){
tr[x].l=l;
tr[x].r=r;
if(l==r){
tr[x].mx=0;
return;
}
int mid=(l+r)/2;
build_tree(x*2,l,mid);
build_tree(x*2+1,mid+1,r);
upd(x);
}
void add_tree(int x,int m,int v){
if(tr[x].l==tr[x].r){
tr[x].mx+=v;
return;
}
int mid=(tr[x].l+tr[x].r)/2;
if(m<=mid){
add_tree(x*2,m,v);
}else{
add_tree(x*2+1,m,v);
}
upd(x);
}
int find_tree(int x,int l,int r){
if(tr[x].l==l&&tr[x].r==r){
return tr[x].mx;
}
int mid=(tr[x].l+tr[x].r)/2;
if(r<=mid){
return find_tree(x*2,l,r);
}else if(l>mid){
return find_tree(x*2+1,l,r);
}else{
return max(find_tree(x*2,l,mid),find_tree(x*2+1,mid+1,r));
}
}
int n,p,r=0,last=0;
int main(){
cin>>n>>p;
build_tree(1,1,1250000);
for(int i=1;i<=n;i++){
char a;
int b;
cin>>a>>b;
if(a=='A'){
r++;
add_tree(1,r,(b+last)%p);
}else{
last=find_tree(1,r-b+1,r);
printf("%d\n",last);
}
}
return 0;
}
LOJ 10127 -「一本通 4.3 练习 1」最大数的更多相关文章
- LOJ#10117. 「一本通 4.1 练习 2」简单题
LOJ#10117. 「一本通 4.1 练习 2」简单题 题目描述 题目来源:$CQOI 2006$ 有一个$n$个元素的数组,每个元素初始均为$0$.有$m$条指令,要么让其中一段连续序列数字反转— ...
- LOJ#10064. 「一本通 3.1 例 1」黑暗城堡
LOJ#10064. 「一本通 3.1 例 1」黑暗城堡 题目描述 你知道黑暗城堡有$N$个房间,$M$条可以制造的双向通道,以及每条通道的长度. 城堡是树形的并且满足下面的条件: 设$D_i$为如果 ...
- LOJ #10131 「一本通 4.4 例 2」暗的连锁
LOJ #10131 「一本通 4.4 例 2」暗的连锁 给一棵 \(n\) 个点的树加上 \(m\) 条非树边 , 现在需要断开一条树边和一条非树边使得图不连通 , 求方案数 . $n \le 10 ...
- Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...
- LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)
题意描述: 见原LOJ:https://loj.ac/problem/10084 题解: 假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到: X=(A1+A2+A3+.. ...
- LOJ #10132. 「一本通 4.4 例 3」异象石
题目地址 LOJ 题解 神仙思路.思路参考自<算法竞赛进阶指南>. 考虑维护dfs序中相邻两个石头的距离,那么每次?的答案就是sum/2(首尾算相邻) 然后维护一下拿个平衡树/set维护一 ...
- LOJ #10222. 「一本通 6.5 例 4」佳佳的 Fibonacci
题目链接 题目大意 $$F[i]=F[i-1]+F[i-2]\ (\ F[1]=1\ ,\ F[2]=1\ )$$ $$T[i]=F[1]+2F[2]+3F[3]+...+nF[n]$$ 求$T[n] ...
- LOJ#10065. 「一本通 3.1 例 2」北极通讯网络
题目链接:https://loj.ac/problem/10065 题目描述 原题来自:Waterloo University 2002 北极的某区域共有 nnn 座村庄,每座村庄的坐标用一对整数 ( ...
- LOJ#10106. 「一本通 3.7 例 2」单词游戏
题目链接:https://loj.ac/problem/10106 题目描述 来自 ICPC CERC 1999/2000,有改动. 有 NNN 个盘子,每个盘子上写着一个仅由小写字母组成的英文单词. ...
随机推荐
- Fire Net HDU - 1045(二分匹配)
把每一列中相邻的 . 缩为一个点 作为二分图的左边 把每一行中相邻的 . 缩为一个点 作为二分图的右边 然后求最大匹配即可 这题用匈牙利足够了...然而..我用了hk...有点大材小用的感觉// ...
- Educational Codeforces Round 14 D. Swaps in Permutation(并查集)
题目链接:http://codeforces.com/contest/691/problem/D 题意: 题目给出一段序列,和m条关系,你可以无限次互相交换这m条关系 ,问这条序列字典序最大可以为多少 ...
- WCF trace、log
1. 打开wcf配置: 2. enable trace , log 可以改变log路径: 3. 用 SvcTraceViewer.exe (直接在c盘下搜索) 查看 4. 如果想自定义trac ...
- Problem A: 道路建设 解题报告
一定存在一个最优解是一条链 否则可以接上去,不会更差 边权最小的边一定在这条链上 这个比较显然 可以把所有边都减去这个最后加上就行了 把链上的边按距离当前根的深度从小到大排列,设第一个零边位置为\(k ...
- 洛谷 P1344 [USACO4.4]追查坏牛奶Pollutant Control 解题报告
P1344 [USACO4.4]追查坏牛奶Pollutant Control 题目描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候 ...
- [APIO2018] Duathlon 铁人两项
不经过重点,考虑点双 点双,考虑圆方树 两个点s,t,中间路径上,所有点双里的点都可以经过,特别地,s,t作为割点的时候,不能往后走,也就是不能经过身后的方点 也就是,(s,t)经过树上路径上的所有圆 ...
- 【洛谷P1828】香甜的黄油
题目大意:给定 N 个点,M 条边的无向图,在其中选定 P 个点,每个点可能被选多次,求图中的一个点到选定的 P 个点的距离的值最小是多少. 题解:由于数据范围的限制,直接 Floyd 会超时,因此对 ...
- 【HDU5687】Trie
题目大意:需要维护一个支持以下操作的数据结构:(1)支持插入一个字符串(2)支持删除所有前缀等于给定字符串的单词(3)查询该数据结构中是否存在一个以给定字符串为前缀的字符串 题解:由题目可知,需要维护 ...
- 各种蕴含算法思想的DP - 2
study from: https://www.cnblogs.com/flashhu/p/9480669.html 3.斜率dp study from:http://www.cnblogs.com/ ...
- 理解JVM GC
理解JVM GC对于我们把控Java应用有很大的帮助.下面我从运维角度,把网上的JVM相关的资料整理如下,以加深对JVM GC的理解.如有错误的地方,请看官指正. JVM内存使用分类 JVM的内存分区 ...