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

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. W - Prime Time 素数判断+前缀和

    W - Prime Time 题意:用公式n*n+n+41,判断素数的百分比 #include<iostream> #include<algorithm> #include&l ...

  2. springboot不能加载主类

    参考:https://www.cnblogs.com/iyyy/p/8085719.html 若为maven项目:用maven更新下项目.

  3. 夯实Java基础系列目录

    自进入大学以来,学习的编程语言从最初的C语言.C++,到后来的Java,. NET.而在学习编程语言的同时也逐渐决定了以后自己要学习的是哪一门语言(Java).到现在为止,学习Java语言也有很长一段 ...

  4. 02-10Android学习进度报告十

    今天我学习了有关ListView的基础知识,主要是学习了其中界面展示的基本方法. 首先看一个简单的列表实现代码: public class Animal { private String aName; ...

  5. CentOS 7 搭建Cobbler实现自动化安装系统

    1.安装软件包 # yum -y install epel-release     #安装EPEL源 # yum -y install cobbler dhcp pykickstart 2.启动cob ...

  6. mysql-e选项

    -e Execute command and quit 通过-e选项,可以在命令行中操作mysql 一些mysql设置的有密码,此时可以在my.ini(my.cnf)的[client]下面给出数据库的 ...

  7. java 调用阿里云短信接口,报InvalidTimeStamp.Expired : Specified time stamp or date value is expired.

    官网解释: 问题所在: 自己的电脑(或者服务器) 的时间与阿里云的服务器时间 相差15分钟了. 解决方法 : 把自己的电脑时间 (或者服务器)的时间 改成标准的北京时间就行了.

  8. 百度云bae安装discuz论坛教程

    作者:孤风一剑   发布:2013-05-11 13:37   栏目:站长在线   点击:6,846次   41条评论 各位草根们有福啦,弄了几天,终于可以在bae上搭建discuz论坛了,下面我就简 ...

  9. iOS沙盒目录简介、沙盒路径获取

    一.沙盒的意义 出于安全的考虑,iOS系统的沙盒机制规定每个应用只能访问当前沙盒目录下面的文件.但是对于一些用户级别的数据,考虑到很多软件都需要使用其中的数据,用户可以通过对当前的软件授权,让当前的应 ...

  10. I Hate it-HDU1754 点修改+区间最大值

    题意: 很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少.这让很多学生很反感.不管你喜不喜欢, 现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然, ...