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

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. 二十二 XML校验器

    Struts2提供的校验器及其规则:

  2. 吴裕雄--天生自然ORACLE数据库学习笔记:表分区与索引分区

    create table ware_retail_part --创建一个描述商品零售的数据表 ( id integer primary key,--销售编号 retail_date date,--销售 ...

  3. EC20的指令

    AT+QURCCFG="urcport","usbat" :当设置在主串口时且用主串口进行AT交互时开机会收到一串状态的信息,默认USBAT就不会 AT+IPR ...

  4. 【PAT甲级】1023 Have Fun with Numbers (20 分)

    题意: 输入一个不超过20位的正整数,问乘2以后是否和之前的数组排列相同(数字种类和出现的个数不变),输出Yes或No,并输出乘2后的数字. AAAAAccepted code: #define HA ...

  5. windows网络编程-C语言实现简单的UDP协议聊天

    与TCP协议下编写服务端程序代码类似,但因为是无连接的形式,所以不需要监听. 这次,我用了一点不同的想法:我建立一个服务端,用了两个端口和两个套接字,把服务端作为一个数据转发的中转站,使得客户机之间进 ...

  6. js运算符的特殊应用

    是否包含指定字符: ~ 取整: | 取半: >> 成长值评级: || 判断奇偶: & 交换两个数字的值: ^= 2的n次方: << 和 ** 1 << n- ...

  7. windows系统桌面美化

    系统主题:https://zhutix.com/ 壁纸:https://wallhaven.cc/

  8. mac允许安装任何来源的软件

    如果在“系统偏好设置”--“安全性与隐私”--“通用”版面没有像下面的选项.那么请打开终端,使用命令行操作,之后重新进刚刚的设置界面,会出现“任何来源”的选项. 命令行:(请复制使用) sudo sp ...

  9. Springboot 项目启动设置

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

  10. 简述javascript的解析与执行

    我们知道浏览器中javascript程序的执行是基于变量与函数的.那么浏览器是如何保存数据,又是如何执行的呢?今天我们一起来探究一下! 0.写在前 最新的 ECMAScript 标准定义了 8 种数据 ...