CF1677E Tokitsukaze and Beautiful Subsegments
(题目传送门)
你就算再怎么套路我也做不出来……
看到
将这个区间贡献看成矩形的赋值,这是难操作的,尝试转化成矩形加。发现不同的
将单个
#include<bits/stdc++.h>
#define LL long long
#define pii pair<int,int>
using namespace std;
const int N=2e5+10,M=1e6+10;
int n,m,p[N],q[N];
int sta[N],top,pre[N],nxt[N];
vector <pii> P[N],tmp;
vector < array<int,4> > Q[N];
vector < array<int,3> > mat[N];
LL ans[M];
struct BIT
{
LL c1[N],c2[N];
void add(int x,int y)
{
for(int i=x; i<=n; i+=(i&-i))
{
c1[i]+=(LL)y;
c2[i]+=1LL*y*x;
}
}
LL ask(int x)
{
LL res=0;
for(int i=x; i; i-=(i&-i))
res+=1LL*(x+1)*c1[i]-c2[i];
return res;
}
void update(int l,int r,int v){add(l,v);add(r+1,-v);}
LL query(int l,int r){return ask(r)-ask(l-1);}
}T1,T2;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
scanf("%d",&p[i]),q[p[i]]=i;
for(int i=1; i<=n; i++)
{
while(top && p[sta[top]]<p[i])
top--;
pre[i]=sta[top]; sta[++top]=i;
}
sta[top=0]=n+1;
for(int i=n; i>=1; i--)
{
while(top && p[sta[top]]<p[i])
top--;
nxt[i]=sta[top]; sta[++top]=i;
}
for(int i=1; i*(i+1)<=n; i++)
for(int j=i+1; i*j<=n; j++)
if(pre[q[i*j]]<min(q[i],q[j]) && nxt[q[i*j]]>max(q[i],q[j]))
P[q[i*j]].push_back({min({q[i],q[j],q[i*j]}),max({q[i],q[j],q[i*j]})});
for(int i=1; i<=n; i++)
{
tmp.clear();
tmp.push_back({pre[i],i-1});
sort(P[i].begin(),P[i].end(),[](pii A,pii B)
{return A.first==B.first? A.second>B.second:A.first<B.first;});
for(auto [l,r]:P[i])
{
while(r<=tmp.back().second)
tmp.pop_back();
tmp.push_back({l,r});
}
for(int j=1; j<tmp.size(); j++)
{
mat[tmp[j].second].push_back({tmp[j-1].first+1,tmp[j].first,1});
mat[nxt[i]].push_back({tmp[j-1].first+1,tmp[j].first,-1});
}
}
for(int i=1; i<=m; i++)
{
int l,r;
scanf("%d%d",&l,&r);
Q[r].push_back({l,r,i,1});
Q[l].push_back({l,r,i,-1});
}
for(int i=1; i<=n; i++)
{
for(auto [l,r,op]:mat[i])
{
T1.update(l,r,op);
T2.update(l,r,op*(i-1));
}
for(auto [l,r,id,op]:Q[i])
ans[id]=1LL*op*i*T1.query(l,r)-T2.query(l,r);
}
for(int i=1; i<=m; i++)
printf("%lld\n",ans[i]);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?