codeforces 891 (div3)857E - Power of Points
E. 点的力量
每个测试限时2秒
每个测试限制内存为256兆字节
输入以标准格式输入
输出以标准格式输出
给定n个具有整数坐标x1,…xn的点,这些点位于数线上。对于某个整数s,我们构建段[s, x1],[s, x2],…,[s, xn]。注意,如果xi<s,则段将类似于[xi, s]。段[a, b]覆盖了所有整数点a,a+1,a+2,…,b。我们定义点p的力量为与坐标p相交的段的数量,表示为fp。您的任务是计算总和∑p=1109fp,对于每一个s∈{x1,…,xn},即从1到109的所有整数点的fp的和。
例如,如果初始坐标为[1,2,5,7,1],我们选择s=5,那么段将是:[1,5],[2,5],[5,5],[5,7],[1,5]。点的力量将是:f1=2,f2=3,f3=3,f4=3,f5=5,f6=1,f7=1,f8=0,…,f109=0。它们的和是2+3+3+3+5+1+1=18。
输入
第一行包含一个整数t(1≤t≤104)- 测试的数量。每个测试用例的第一行包含一个整数n(1≤n≤2⋅105)- 点的数量。
第二行包含n个整数x1,x2…xn(1≤xi≤109)- 点的坐标。保证所有测试用例中n的值的总和不超过2⋅105。
输出
对于每个测试用例,输出n个整数,其中第i个整数等于s=xi时所有点的力量之和。
示例
输入示例
3 3 1 4 3 5 1 2 5 7 1 4 1 10 100 1000
输出示例
8 7 6 16 15 18 24 16 1111 1093 1093 2893
说明
在第一个测试用例中,我们首先选择s=x1=1,然后形成以下段:[1,1],[1,4],[1,3]。
点的力量将如下所示:f1=3,f2=2,f3=2,f4=1,f5=0...点的力量之和:3+2+2+1+0+⋯+0=8。
然后我们选择s=x2=4。然后会有这样的段:[1,4],[4,4],[3,4],点的力量是f1=1,f2=1,f3=2,f4=3。
最后我们取s=x3=3,段看起来像这样:[1,3],[3,4],[3,3],点的力量是f1=1,f2=1,f3=3,f4=1。
示范代码:
#include<bits/stdc++.h> using namespace std; const int N = 200005; #define int long long pair<int,int> x[N]; int a[N]; signed main() { int t; cin>>t; while(t--) { int n; cin>>n; int s1=0,s2=0; for(int i=1;i<=n;i++) { cin>>x[i].first; x[i].second=i; s2+=x[i].first; } sort(x+1,x+n+1); for(int i=1;i<=n;i++) { s2-=x[i].first; s1+=x[i].first; a[x[i].second]=n+x[i].first*(2*i-n)-s1+s2; } for(int i=1;i<=n;i++)cout<<a[i]<<" \n"[i==n]; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理