好久没更博客了,随便水一篇

E. Range Deleting

题意

给你一个长度为 \(n\) 的序列 \(a_1,a_2,\dots a_n\) ,定义 \(f(l,r)\) 为删除 \(l\le a_i\le r\) 元素后的序列。求所有 \(f(l,r)\) 单调不降序列的数量。

\(n,a_i\le 10^6\)

题解

简单题,但还是调了一年(见代码注释)。

考虑删除后的区间,一定是一段前缀并上一段后缀。首先找到一段合法的极长后缀,然后枚举前缀,在保证前缀合法的情况下双指针统计有多少个合法的后缀即可。复杂度 \(O(n)\) 。

code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
inline int gi()
{
char c=getchar(); int x=0;
for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+c-'0';
return x;
}
const int N=1e6+5;
int a[N],n,x,ans,fst[N],lst[N],gst[N];
int main()
{
#ifdef lc
freopen("in.txt","r",stdin);
#endif
n=gi(),x=gi();
memset(fst,0x3f,sizeof(fst));
for(int i=1;i<=n;++i)
{
a[i]=gi();
if(fst[a[i]]==fst[0]) fst[a[i]]=i;
lst[a[i]]=i;
}
int r=x,f=fst[x]; gst[x]=fst[x];
for(;r>=1;--r)
{
if(gst[r]<lst[r-1]) break;
gst[r-1]=min(gst[r],fst[r-1]);
}
if(!r)
{
printf("%I64d",1ll*x*(x+1)/2);
return 0;
}
int l=0;
long long ans=0;
for(int i=1;i<=x;++i)
{
for(r=max(r,i);r<=x&&gst[r]<l;++r);
ans+=x-r+2; //注意不能 --r, ans+=x-r+1 ……
if(fst[i]<l) break;
l=max(l,lst[i]);
}
printf("%I64d",ans);
}

F. Scalar Queries

题意

给你一个长度为 \(n\) 的序列 \(a_1,a_2,\dots a_n\) ,设 \(f(l,r)\) 等于序列 \([l,r]\) 内每个数乘上在当前区间的排名的和。求 \(\sum_{1\le l\le r\le n} f(l,r)\) .

\(n\le 5\cdot 10^5, a_i\le 10^9\) 。

题解

比前一题还简单,直接考虑当前数的贡献。离散化后直接两个树状数组维护左边和右边比当前数小的数的个数和下标和,随便统计一下就好。\(O(n\log n)\) 。

代码略丑。

code

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=5e5+5,Mod=1e9+7;
int a[N],b[N],n,t1[N],t2[N],s1[N],s2[N],c[N],m,ans;
#define lowbit(x) (x&-x)
void upd(int* t, int i, int w) {
for(;i<=m;i+=lowbit(i)) t[i]=((t[i]+w)%Mod+Mod)%Mod;
}
int qry(int* t, int i)
{
int r=0;
for(;i;i-=lowbit(i)) r=(r+t[i])%Mod;
return r;
}
void add(int x) { ans=(ans+x)%Mod; }
int mul(int x, int y) {
x=1ll*(x+Mod)%Mod, y=1ll*(y+Mod)%Mod;
return 1ll*x*y%Mod;
}
int main()
{
#ifdef lc
freopen("in.txt","r",stdin);
#endif
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]), c[i]=a[i];
sort(c+1,c+1+n),m=unique(c+1,c+1+n)-c-1;
for(int i=1;i<=n;++i)
{
b[i]=lower_bound(c+1,c+1+m,a[i])-c;
upd(t2,b[i],1);
upd(s2,b[i],i);
}
for(int i=1;i<=n;++i)
{
int x1=qry(t1,b[i]),y1=qry(s1,b[i]),x2=qry(t2,b[i]),y2=qry(s2,b[i]);
add(mul(a[i],mul(i,((mul(n+1,x2)-y2)%Mod+Mod)%Mod)));
add(mul(a[i],mul(n-i+1,y1)));
upd(t2,b[i],-1),upd(s2,b[i],-i);
upd(t1,b[i],1),upd(s1,b[i],i);
}
printf("%d",ans);
}

Educational Codeforces Round 65 选做的更多相关文章

  1. Educational Codeforces Round 64 选做

    感觉这场比赛题目质量挺高(A 全场最佳),难度也不小.虽然 unr 后就懒得打了. A. Inscribed Figures 题意 给你若干个图形,每个图形为三角形.圆形或正方形,第 \(i\) 个图 ...

  2. Educational Codeforces Round 63 选做

    D. Beautiful Array 题意 给你一个长度为 \(n\) 的序列.你可以选择至多一个子段,将该子段所有数乘上给定常数 \(x\) .求操作后最大的最大子段和. 题解 考虑最大子段和的子段 ...

  3. Educational Codeforces Round 65 (Rated for Div. 2)题解

    Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...

  4. Educational Codeforces Round 65 (Rated for Div. 2) D. Bicolored RBS

    链接:https://codeforces.com/contest/1167/problem/D 题意: A string is called bracket sequence if it does ...

  5. Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution

    链接:https://codeforces.com/contest/1167/problem/C 题意: In some social network, there are nn users comm ...

  6. Educational Codeforces Round 65 (Rated for Div. 2) B. Lost Numbers

    链接:https://codeforces.com/contest/1167/problem/B 题意: This is an interactive problem. Remember to flu ...

  7. Educational Codeforces Round 65 (Rated for Div. 2) A. Telephone Number

    链接:https://codeforces.com/contest/1167/problem/A 题意: A telephone number is a sequence of exactly 11  ...

  8. Educational Codeforces Round 65 (Div. 2)

    A.前n-10个有8即合法. #include<cstdio> #include<cstring> #include<iostream> #include<a ...

  9. Educational Codeforces Round 65 E,F

    E. Range Deleting 题意:给出一个序列,定义一个操作f(x,y)为删除序列中所有在[x,y]区间内的数.问能使剩下的数单调不减的操作f(x,y)的方案数是多少. 解法:不会做,思维跟不 ...

随机推荐

  1. SpringBoot中普通类无法通过@Autowired自动注入Service、dao等bean解决方法

    无法注入原因: 有的时候我们有一些类并不想注入Spring容器中,有Spring容器实例化,但是我们又想使用Spring容器中的一些对象,所以就只能借助工具类来获取了 工具类: package com ...

  2. Maven笔记一

    简介:什么是maven Maven是一个跨平台的项目管理工具,主要用于基于java平台的项目构建,依赖管理. 如图为项目构建的过程. 解决的项目的问题: 1.  如果有好几个项目,这好几个项目中,需要 ...

  3. HDU 5587:Array

    Array  Accepts: 118  Submissions: 232  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072/ ...

  4. matlab练习程序(龙格库塔法)

    非刚性常微分方程的数值解法通常会用四阶龙格库塔算法,其matlab函数对应ode45. 对于dy/dx = f(x,y),y(0)=y0. 其四阶龙格库塔公式如下: 对于通常计算,四阶已经够用,四阶以 ...

  5. 本地jar在打包时打入到项目中去

    <dependency> <groupId>com.hxyc</groupId> <artifactId>hxyc-common</artifac ...

  6. Springboot 项目启动设置

    //配置默认访问路径 并且自动打开浏览器  需要创建独立文件 @Controller public class HomeController {     @RequestMapping("/ ...

  7. ADV-302 秘密行动 java

    问题描述 小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面.这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层,但是这项能力无法连续使用 ...

  8. CNN反向传播算法过程

    主模块 规格数据输入(加载,调格式,归一化) 定义网络结构 设置训练参数 调用初始化模块 调用训练模块 调用测试模块 画图 初始化模块 设置初始化参数(输入通道,输入尺寸) 遍历层(计算尺寸,输入输出 ...

  9. 在cnblog中试用Markdown

    参考: http://www.cnblogs.com/cmt/p/markdown.html https://www.cnblogs.com/cmt/p/markdown-latex.html htt ...

  10. Python可视化 | Seaborn包—heatmap()

    seaborn.heatmap()的参数 seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, robust=Fals ...