当前位置:网站首页>(lightoj - 1369) answering queries (thinking)
(lightoj - 1369) answering queries (thinking)
2022-07-06 16:25:00 【AC__ dream】
Topic link :Answering Queries - LightOJ 1369 - Virtual Judge
The question : Definition f(A,n) yes Result , We have two operations , One is to query the current results , The other is to put A Modify the value of an element in the array
analysis : We first find the result of the original array , Note that you cannot solve the result of the original array directly , This will time out , We can only observe the characteristics of each number to find the law to solve , such as a[i] Will act as n-i Secondary addend , And as a i-1 Times subtraction , So in general a[i] Will be added (n-2*i+1) Time , Using this law, we can o(n) Calculate the result of the original array , Let's analyze it a little bit What will be the impact of modifying an element on the result , For example a[x] yes m, Now change it to n, So for any containing a[x] The value of the expression of will change accordingly ,a[x] There are two ways in expressions , One is a[i]-a[x](i<x), The other is a[x]-a[j](j>x), The value of the former expression will increase m-n Yes x-1 This happens to expressions , The latter expression will reduce m-n, Yes n-x This happens to expressions , Generally speaking, there is an increase (2*x-n-1) individual (m-n), So we can o(1) The result was modified , Here is the code :
#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
#define int long long
const int N=1e5+10;
int a[N];
signed main()
{
int T;
cin>>T;
for(int _=1;_<=T;_++)
{
printf("Case %lld:\n",_);
long long ans=0;
int n,q;
scanf("%lld%lld",&n,&q);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
ans+=(n-2*i+1)*a[i];
while(q--)
{
int op,x,y;
scanf("%lld",&op);
if(op==1) printf("%lld\n",ans);
else
{
scanf("%lld%lld",&x,&y);
x++;
ans+=(a[x]-y)*(2*x-1-n);
a[x]=y;
}
}
}
return 0;
}
边栏推荐
- Codeforces Round #802(Div. 2)A~D
- 分享一个在树莓派运行dash应用的实例。
- input 只能输入数字,限定输入
- (POJ - 3579) median (two points)
- Hdu-6025-prime sequence (girls' competition)
- Study notes of Tutu - process
- Candy delivery (Mathematics)
- window11 conda安装pytorch过程中遇到的一些问题
- The "sneaky" new asteroid will pass the earth safely this week: how to watch it
- B - Code Party (girls' competition)
猜你喜欢
Advancedinstaller安装包自定义操作打开文件
1689. Ten - the minimum number of binary numbers
Flask框架配置loguru日志庫
Kubernetes cluster deployment
OneForAll安装使用
Oneforall installation and use
QT实现窗口渐变消失QPropertyAnimation+进度条
Codeforces Round #801 (Div. 2)A~C
<li>圆点样式 list-style-type
Programmers, what are your skills in code writing?
随机推荐
Calculate the time difference
AcWing——第55场周赛
860. Lemonade change
807. Maintain the urban skyline
AcWing:第56场周赛
1013. Divide the array into three parts equal to and
Share an example of running dash application in raspberry pie.
Oneforall installation and use
Determine the Photo Position
Codeforces Round #801 (Div. 2)A~C
Educational Codeforces Round 130 (Rated for Div. 2)A~C
树莓派4B安装opencv3.4.0
628. Maximum product of three numbers
(lightoj - 1236) pairs forming LCM (prime unique decomposition theorem)
本地可视化工具连接阿里云centOS服务器的redis
1689. Ten - the minimum number of binary numbers
Radar equipment (greedy)
875. 爱吃香蕉的珂珂 - 力扣(LeetCode)
HDU - 6024 building shops (girls' competition)
Pytorch extract skeleton (differentiable)