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

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. java.io.IOException: java.io.FileNotFoundException: /tmp/tomcat.2457258178644046891.8080/work/Tomcat/localhost/innovate-admin/C:/up/154884318438733213952/sys-error.log (没有那个文件或目录)

    环境: Ubuntu18 vue+elementUI 实现文件的上传 报错信息: MultipartFile.transferTo(dest) 报 FileNotFoundException java ...

  2. 4 Action的3种编写方式,pojo,实现和继承(推荐)

    Action的访问: 1 Action类是pojo(Plain Ordinary Java Object):简单Java对象,无接口,无继承.例如上篇文章中只创建了public String exec ...

  3. 避免学习Linux走弯路

    我并不是一位Linux老鸟.在学习Linux的一路上.也是走了很多弯路,踩了不少坑.而今日就把自己趟过的那些坑给我们总结出来,期望能给初学Linux的童靴们带来一丝丝的帮助吧.文采可能没有那么高深,只 ...

  4. springcloud gateway nullpointerexception (NettyRoutingFilter)

    最近在做一个下载功能时,发现直接调用服务是可以下载的,但是通过gateway路由下载会报NPE异常,具体如下 java.lang.NullPointerException: null at java. ...

  5. CVPR 2019 行人检测新思路:

    CVPR 2019 行人检测新思路:高级语义特征检测取得精度新突破 原创: CV君 我爱计算机视觉 今天 点击我爱计算机视觉置顶或标星,更快获取CVML新技术 今天跟大家分享一篇昨天新出的CVPR 2 ...

  6. 搭建PXE实现自动化安装系统

    一.PXE工作原理 Ø  Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的I ...

  7. 在ng-repeat 中使用 ng-click

    angular 中使用 ng-repeat  过程中,有时需要绑定 事件 click ,使用ng-click ,但是并没有效果,此时应该使用 data-ng-click 替代 ng-click ,并且 ...

  8. 利用django打造自己的工作流平台(一):从EXCEL到流程化运作

    因工作所需以及管理个人一些日常事项,自己基于django(一个基于python的web框架,详细介绍可查阅相关资料)开发了一个简易的工作流平台[平台地址].本文首先简要介绍工作流平台的设计思想及其在项 ...

  9. UGUI 特效怎样在UI上裁剪

    刚好碰到有人问怎样把粒子特效放到 UI 上并且能正确被 Mask 裁剪, 首先想到给粒子效果的 Shader 添加模板模仿一般 UI 的模板方式, 应该就能正确裁剪了吧, 不过没那么简单, 我们看到在 ...

  10. 「NOIP2009」Hankson 的趣味题

    Hankson 的趣味题 [内存限制:$128 MiB$][时间限制:$1000 ms$] [标准输入输出][题目类型:传统][评测方式:文本比较] 题目描述 Hanks 博士是 BT(Bio-Tec ...