【NOIP2015模拟11.5】JZOJ8月5日提高组T2 Lucas的数列

题目





PS:\(n*n*T*T<=10^{18}\)而不是\(10^1*8\)

题解

题意:

给出\(n\)个元素的复杂度和位置

然后每次询问一个区间

每次询问给出\(x,y,z\)

求\(x\)到\(y\)中复杂度小于等于\(z\)的元素的位置按照一定计算过程后的答案(具体见题面)

分析:

看到题目给出的式子十分的繁琐

我们来化简一下

\[K=(\sum_{i=1}^m(x_i-p)^2)*m=(\sum_{i=1}^m((x_i)^2-2x_ip+p^2))*m=(\sum_{i=1}^m(x_i)^2-\sum_{i=1}^m2x_ip+\sum_{i=1}^mp^2)*m
\]
\[=(\sum_{i=1}^m(x_i)^2-\sum_{i=1}^m2x_i\dfrac{\sum_{i=1}^mx_i}{m}+m(\dfrac{\sum_{i=1}^mx_i}{m})^2)*m=m\sum_{i=1}^m(x_i)^2-2({\sum_{i=1}^mx_i})^2+({\sum_{i=1}^mx_i})^2=m\sum_{i=1}^m(x_i)^2-({\sum_{i=1}^mx_i})^2
\]

所以说,\(K\)其实一直都是个整数:\(m\sum_{i=1}^m(x_i)^2-({\sum_{i=1}^mx_i})^2\)

再看,这题并不要求在线

所以可以离线

按照\(w\)和\(z\)为第一关键字排序

然后维护一个\(j\)使得\(1\)~\(j\)内的\(w\)都小于当前的\(z\)

由于\(z\)是单调递增的,所以\(j\)不用清零

然后构造一棵线段树(树状数组)就可以了

Code

#include<cstdio>
#include<algorithm>
using namespace std;
struct node1
{
long long p,w,id;
}a[400005];
struct node2
{
long long x,y,z,lixian;
}c[400005];
struct node3
{
long long sum1,sum2,num;
}tree[1600005];
bool cmp1(node1 x,node1 y)
{
return x.w<y.w;
}
bool cmp2(node2 x,node2 y)
{
return x.z<y.z;
}
long long n,m,i,j;
long long s1,s2,s3,ans[400005];
void build(long long now,long long l,long long r,long long pos,long long val)
{
if (l==r)
{
if (l==pos)
{
tree[now].num=1;
tree[now].sum1=val*val;
tree[now].sum2=val;
}
return;
}
if (l>pos||r<pos) return;
long long mid=(l+r)>>1;
build(now<<1,l,mid,pos,val);
build(now<<1|1,mid+1,r,pos,val);
tree[now].num=tree[now<<1].num+tree[now<<1|1].num;
tree[now].sum1=tree[now<<1].sum1+tree[now<<1|1].sum1;
tree[now].sum2=tree[now<<1].sum2+tree[now<<1|1].sum2;
}
void query(long long now,long long l,long long r,long long p,long long q)
{
if (tree[now].num==0) return;
if (l>q||r<p) return;
if (l>=p&&r<=q)
{
s1+=tree[now].num;
s2+=tree[now].sum1;
s3+=tree[now].sum2;
return;
}
long long mid=(l+r)>>1;
query(now<<1,l,mid,p,q);
query(now<<1|1,mid+1,r,p,q);
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%lld%lld",&n,&m);
for (i=1;i<=n;i++)
{
scanf("%lld%lld",&a[i].w,&a[i].p);
a[i].id=i;
}
for (i=1;i<=m;i++)
{
scanf("%lld%lld%lld",&c[i].x,&c[i].y,&c[i].z);
c[i].lixian=i;
}
sort(a+1,a+n+1,cmp1);
sort(c+1,c+m+1,cmp2);
j=1;
for (i=1;i<=m;i++)
{
while (a[j].w<=c[i].z&&j<=n)
{
build(1,1,n,a[j].id,a[j].p);
j++;
}
s1=s2=s3=0;
query(1,1,n,c[i].x,c[i].y);
if (s1==0) ans[c[i].lixian]=-1;
else ans[c[i].lixian]=s1*s2-s3*s3;
}
for (i=1;i<=m;i++)
{
if (ans[i]==-1) printf("empty\n");
else printf("%lld\n",ans[i]);
}
fclose(stdin);
fclose(stdout);
return 0;
}

【NOIP2015模拟11.5】JZOJ8月5日提高组T2 Lucas的数列的更多相关文章

  1. 【NOIP2015模拟11.2晚】JZOJ8月4日提高组T2 我的天

    [NOIP2015模拟11.2晚]JZOJ8月4日提高组T2 我的天 题目 很久很以前,有一个古老的村庄--xiba村,村子里生活着n+1个村民,但由于历届村长恐怖而且黑暗的魔法统治下,村民们各自过着 ...

  2. JZOJ8月10日提高组T2 Fix

    JZOJ8月10日提高组T2 Fix 题目 Description There are a few points on a plane, and some are fixed on the plane ...

  3. 【NOIP2015模拟11.5】JZOJ8月5日提高组T1 俄罗斯套娃

    [NOIP2015模拟11.5]JZOJ8月5日提高组T1 俄罗斯套娃 题目 题解 题意就是说 将1~\(n\)排列,问有多少种方案使得序列的逆序对个数小于\(k\) 很容易想到DP 设\(f[i][ ...

  4. 【NOIP2015模拟11.4】JZOJ8月6日提高组T1 刷题计划

    [NOIP2015模拟11.4]JZOJ8月6日提高组T1 刷题计划 题目 题解 题意 有\(n\)道题,编号为1~\(n\) 给出\(m\)次操作 每次操作有3种类型 1 \(x\) 表示交了\(A ...

  5. 【NOIP2015模拟11.5】JZOJ8月5日提高组T3 旅行

    [NOIP2015模拟11.5]JZOJ8月5日提高组T3 旅行 题目 若不存在第\(k\)短路径时,输出"Stupid Mike" 题解 题意 给出一个有\(n\)个点的树 问这 ...

  6. 【NOIP2015模拟11.4】JZOJ2020年8月6日提高组T2 最优交换

    [NOIP2015模拟11.4]JZOJ2020年8月6日提高组T2 最优交换 题目 题解 题意 有一个长度为\(n\)的正整数 最多可以进行\(k\)次操作 每次操作交换相邻两个位置上的数 问可以得 ...

  7. JZOJ8月4日提高组反思

    JZOJ8月4日提高组反思 被一堆2018&2019&2020的巨佬暴打 又是愉快的爆0的一天呢 T1 看了看题 没想法 暴力走起 求个质因数呀,二分呀-- 然后就炸了 正解预处理加二 ...

  8. JZOJ8月10日提高组反思

    JZOJ8月10日提高组反思 T1 没想到怎么打 就去打暴力了 本来想拿个30不错了 结果\(AC\)了 话说回来,数据也挺小的 T2 不AC便爆0 就一个数据点 给不给打暴力的人活了 正解是状压DP ...

  9. JZOJ8月15日提高组反思——2020年暑假终结篇

    JZOJ8月15日提高组反思--2020年暑假终结篇 T1 仙人掌最短路 抱歉我只会最短路 仙人掌是啥? 听说是缩点+\(LCA\) 最短路30 T2 直接暴力计算 正解\(DP\) \(amazin ...

随机推荐

  1. ThinkPHP中,运用PHPExcel,将数据库导出到Excel中

    1.将PHPExcel插件放在项目中,本人位置是ThinkPHP文件夹下,目录结构如下/ThinkPHP/Library//Vendor/...2.直接根据模型,配置三个变量即可使用./** * Ex ...

  2. linux的mysql数据库创建和删除

    mysql -h localhost -u 用戶名 -p密碼                //连接数据库use desk_show;                                 ...

  3. 微服务网关Zuul和Gateway的区别

    spring-cloud-Gateway是spring-cloud的一个子项目.而zuul则是netflix公司的项目,只是spring将zuul集成在spring-cloud中使用而已.因为zuul ...

  4. 【开发板试用报告】鸿蒙OS环境搭建及代码烧录

    鸿蒙系统的代码编译环境需要linux系统,软件开发和代码烧录需要windows环境. Linux环境 参考官方链接:https://gitee.com/openharmony/docs/blob/ma ...

  5. Activit的心路历程:获取当前节点的下一节点【可能存在多个】的nodeId

    上一任务节点 在我的开发任务中,突然给我提出了一个待办任务需要获取当前任务节点下一任务节点的表单信息,刚开始搞得我有点措手不及,后来仔细是靠后,灵感一下,直接操作流程的bpmn信息就可以获取到节点信息 ...

  6. Redis 数据结构之字符串的那些骚操作

    Redis 字符串底层用的是 sds 结构,该结构同 c 语言的字符串相比,其优点是可以节省内存分配的次数,还可以... 这样写是不是读起来很无聊?这些都是别人咀嚼过后,经过一轮两轮三轮的再次咀嚼,吐 ...

  7. waf 引擎云原生调研---扫盲

    概念: lstio Istio是一个用于服务治理的开放平台 Istio是一个Service Mesh形态的用于服务治理的开放平台 Istio是一个与Kubernetes紧密结合的适用于云原生场景的Se ...

  8. nginx&http 第二章 ngx 事件event初始化 ngx_event_process_init

    |----------(ngx_worker_process_cycle->ngx_worker_process_init) |--------->for(;;) {ngx_process ...

  9. LeetCode283移动零问题java高效解法

    一.题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 1.必须 ...

  10. 用JavaScript做精灵图

    用JavaScript做精灵图 精灵图可以不用在给每一个小块一 一的修改位置.主要原理是找到整张的背景图与li的下标的数学关系. 这是一大张背景图,这个背景图的位置其实是有规律的,每两张之间间隔一个固 ...