Lucky Array Codeforces - 121E && Bear and Bad Powers of 42 Codeforces - 679E
http://codeforces.com/contest/121/problem/E
话说这题貌似暴力可A啊。。。
正解是想出来了,结果重构代码,调了不知道多久才A
错误记录:
1.线段树搞混num(节点编号)和l(区间端点)
2.之前的dfs没有分离,写的非常混乱,迫不得已重构代码
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define N 100000
int data[]={,,,,,,,,,,,,,,
,,,,,,,,,,,,
,,,};
bool ok[];
int sd=;
int n,m;
int d[N+];
vector<pii> qq;
//d[i]表示满足data[j]>(i位置的实际值)的最小j
//线段树中查询出的位置的值表示data[d[i]]-(i位置的实际值)
namespace S
{
#define mid (l+((r-l)>>1))
#define lc (num<<1)
#define rc (num<<1|1)
int minn[*N],sum[*N],delv[*N];
void pd(int num)
{
minn[lc]-=delv[num];minn[rc]-=delv[num];
delv[lc]+=delv[num];delv[rc]+=delv[num];
delv[num]=;
}
void delx(int L,int R,int x,int l,int r,int num)
{
if(L<=l&&r<=R)
{
minn[num]-=x;delv[num]+=x;
return;
}
pd(num);
if(L<=mid) delx(L,R,x,l,mid,lc);
if(mid<R) delx(L,R,x,mid+,r,rc);
minn[num]=min(minn[lc],minn[rc]);
}
void setx(int L,int x,int l,int r,int num)
{
if(l==r) {minn[num]=x;return;}
pd(num);
if(L<=mid) setx(L,x,l,mid,lc);
else setx(L,x,mid+,r,rc);
minn[num]=min(minn[lc],minn[rc]);
}
void setsum(int L,int x,int l,int r,int num)
{
if(l==r) {sum[num]=x;return;}
if(L<=mid) setsum(L,x,l,mid,lc);
else setsum(L,x,mid+,r,rc);
sum[num]=sum[lc]+sum[rc];
}
void update(int l,int r,int num)
{
if(minn[num]>) return;
if(l==r) {qq.pb(mp(l,data[d[l]]-minn[num]));return;}//minn[l]->minn[num]
pd(num);
update(l,mid,lc);update(mid+,r,rc);
minn[num]=min(minn[lc],minn[rc]);
}
int gsum(int L,int R,int l,int r,int num)
{
if(L<=l&&r<=R) return sum[num];
int ans=;
if(L<=mid) ans+=gsum(L,R,l,mid,lc);
if(mid<R) ans+=gsum(L,R,mid+,r,rc);
return ans;
}
void work()
{
for(auto pp:qq)
{
int &l=pp.fi,&d=pp.se;
int p=upper_bound(data,data+sd,d)-data;
setx(l,data[p]-d,,n,);
setsum(l,ok[d],,n,);
::d[l]=p;
}
qq.clear();
}
}
char tmp[];
int main()
{
int i,t,L,R,x;
for(i=;i<sd;i++) ok[data[i]]=;
for(i=;i<sd;i++) data[i+sd]=data[i]+;
sd*=;sort(data,data+sd);
data[sd++]=;
scanf("%d%d",&n,&m);
for(i=;i<=n;i++) scanf("%d",&t),qq.pb(mp(i,t));
S::work();
while(m--)
{
scanf("%s",tmp);
if(tmp[]=='c')
{
scanf("%d%d",&L,&R);S::update(,n,);S::work();
printf("%d\n",S::gsum(L,R,,n,));
}
else
{
scanf("%d%d%d",&L,&R,&x);
S::delx(L,R,x,,n,);
}
}
return ;
}
https://codeforces.com/problemset/problem/679/E
跟上面那道类似,可以发现涉及到42的幂很少(显然出题人不是想让我们写高精)
因此开一棵线段树维护每个位置到下一个“关键点”(是否是42的幂的属性变化的点)的距离即可
对于区间修改,就用set维护一下相同的区间,一段相同的放在一起处理
大概是这样吧,可能还有一些细节。。
Lucky Array Codeforces - 121E && Bear and Bad Powers of 42 Codeforces - 679E的更多相关文章
- CF679E Bear and Bad Powers of 42
一段时间不写线段树标记,有些生疏了 codeforces 679e Bear and Bad Powers of 42 - CHADLZX - 博客园 关键点是:42的次幂,在long long范围内 ...
- codeforces 679e Bear and Bad Powers of 42
传送门:http://codeforces.com/contest/679/problem/E 题目意思很清晰,给你一个序列,要求你完成以下三个操作: 1.输出A[i] 2.将[a,b]区间的所有数字 ...
- Codeforces 679E - Bear and Bad Powers of 42(线段树+势能分析)
Codeforces 题目传送门 & 洛谷题目传送门 这个 \(42\) 的条件非常奇怪,不过注意到本题 \(a_i\) 范围的最大值为 \(10^{14}\),而在值域范围内 \(42\) ...
- Codeforces679E. Bear and Bad Powers of 42
传送门 今天子帧的一套模拟题的T3. 考试的时候其实已经想到了正解了,但是一些地方没有想清楚,就没敢写,只打了个暴力. 首先考虑用线段树维护区间信息. 先把每个值拆成两个信息,一是距离他最近的且大于他 ...
- Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array 分块
E. Lucky Array time limit per test 4 seconds memory limit per test 256 megabytes input standard inpu ...
- Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array
E. Lucky Array Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers w ...
- Codeforces 385C Bear and Prime Numbers
题目链接:Codeforces 385C Bear and Prime Numbers 这题告诉我仅仅有询问没有更新通常是不用线段树的.或者说还有比线段树更简单的方法. 用一个sum数组记录前n项和, ...
- Codeforces 385B Bear and Strings
题目链接:Codeforces 385B Bear and Strings 记录下每一个bear的起始位置和终止位置,然后扫一遍记录下来的结构体数组,过程中用一个变量记录上一个扫过的位置,用来去重. ...
- Codeforces 680D Bear and Tower of Cubes 贪心 DFS
链接 Codeforces 680D Bear and Tower of Cubes 题意 求一个不超过 \(m\) 的最大体积 \(X\), 每次选一个最大的 \(x\) 使得 \(x^3\) 不超 ...
随机推荐
- java 的File文件
文件是计算中一种主要的数据存储形式. 首先介绍一下,绝对路径和相对路径.绝对路径是书写完整路径,相对路径是值书写文件的部分路径. d:\java\hello.java 就是据对路径.包括完整的路径d ...
- POJ 1183 反正切函数的应用(数学代换,基本不等式)
题目链接:http://poj.org/problem?id=1183 这道题关键在于数学式子的推导,由题目有1/a=(1/b+1/c)/(1-1/(b*c))---------->a=(b*c ...
- 设计模式学习笔记——Chain of Responsibility职责链模式
重点在链.一条链,如果本节点处理不了,则传递给下一个节点处理. 关键是如何传给下一个节点? 主要是由本节点决定传给哪一个节点. public class Client { public static ...
- C++虚复制构造函数,设置Clone()方法返回基类指针,并设置为虚函数
构造函数不能是虚函数.但有时候确实需要能传递一个指向基类对象的指针,并且有已创建的派生类对象的拷贝.通常在类内部创建一个Clone()方法,并设置为虚函数. //Listing 12.11 Virtu ...
- python大法好 vijos1375 大整数
一个k(1<=k<=80)位的十进制正整数N,就是所谓的大整数.请你设计程序,对于给出的某一个大整数N,找到满足p^3+p^2+3p<=n的p的最大值. 输入格式 输入数据只有一行, ...
- SpringBoot配置文件详解
自定义属性与加载 com.dongk.selfproperty.title=wangdkcom.dongk.selfproperty.name=10000 然后通过@Value("${属性名 ...
- YTU 2427: C语言习题 整数排序
2427: C语言习题 整数排序 时间限制: 1 Sec 内存限制: 128 MB 提交: 391 解决: 282 题目描述 用指向指针的指针的方法对n个整数排序并输出.要求将排序单独写成一个函数 ...
- asp+jQuery解决中文乱码
1. [代码][ASP/Basic]代码 '在客户端使用javascript的escape()方法对数据进行编码,在服务器端使用对等的VbsUnEscape()对数据进行解码,同样在服务器端使用Vbs ...
- [Java] static, final
1.静态成员 静态成员独立于类的对象,先于对象的存在而存在.无论创建了类的多少个对象,静态成员都只有一个实例空间.一个静态变量被同一个类的所有对象共享.当改变了其中一个对象的静态变量时,其余对象的静态 ...
- 空间数据索引RTree完全解析及Java实现
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/MongChia1993/article/details/69941783 第一部分 空间数据的背景介 ...