QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#186969 | #3857. Single-track railway | Suiseiseki# | WA | 0ms | 1656kb | C++14 | 956b | 2023-09-24 13:36:11 | 2023-09-24 13:36:12 |
Judging History
answer
#include <cstdio>
#include <algorithm>
typedef long long ll;
const int Maxn=200000;
int n,k;
int a[Maxn+5];
ll f[Maxn+5],sum;
void add(int x,int v){
v=v-a[x];
sum+=v;
a[x]=v;
for(int i=x;i<=n;i+=(i&(-i))){
f[i]+=v;
}
}
ll query(int x){
ll ans=0;
for(int i=x;i>0;i-=(i&(-i))){
ans+=f[i];
}
return ans;
}
int log_2(int x){
return 31-__builtin_clz(x);
}
int find_mid(ll v){
ll val=0;
int ans=0;
for(int i=log_2(n);i>=0;i--){
if(((ans|(1<<i))<=n)&&val+f[ans|(1<<i)]<=v){
ans|=(1<<i);
val+=f[ans];
}
}
return ans;
}
void print_ans(){
int pos=find_mid(sum/2);
ll ans=std::min(2*query(pos+1)-sum,sum-2*query(pos));
printf("%lld\n",ans);
}
int main(){
scanf("%d",&n);
n--;
for(int i=1;i<=n;i++){
int v;
scanf("%d",&v);
add(i,v);
}
print_ans();
scanf("%d",&k);
for(int i=1;i<=k;i++){
int x,v;
scanf("%d%d",&x,&v);
add(x,v);
print_ans();
}
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 1656kb
input:
2 39 7 1 20 1 70 1 56 1 37 1 37 1 37 1 91
output:
39 20 109 76 146 113 183 204
result:
wrong answer 3rd lines differ - expected: '70', found: '109'