社区讨论
求助站外题
题目总版参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo8ux3t3
- 此快照首次捕获于
- 2023/10/28 00:58 2 年前
- 此快照最后确认于
- 2023/10/28 00:58 2 年前
https://loj.ac/p/6278
C#include<bits/stdc++.h>
using namespace std;
const int N=55000;
struct node{
int l,r,la;
}bl[N];
struct node1{
int num,wz;
}a[N];
vector<int> v[N];
int n,id,l,r,c;
void update(int x){
for(int i=0; i<bl[x].r-bl[x].l+1; i++){
v[x][i]=a[bl[x].l+i].num;
}
sort(v[x].begin(),v[x].end());
}
int main(){
scanf("%d",&n);
for(int i=1; i<=n; i++)scanf("%d",&a[i].num);
int sq=sqrt(n);
for(int i=1; i<=sq; i++){
bl[i].l=n/sq*(i-1)+1;
bl[i].r=n/sq*i;
}
bl[sq].r=n;
for(int i=1; i<=sq; i++){
for(int j=bl[i].l; j<=bl[i].r; j++)a[j].wz=i,v[i].push_back(a[j].num);
sort(v[i].begin(),v[i].end());
}
for(int i=1; i<=n; i++){
scanf("%d%d%d%d",&id,&l,&r,&c);
if(!id){
if(a[l].wz==a[r].wz)
for(int j=l; j<=r; j++)a[j].num+=c;
else{
for(int j=l; j<=bl[a[l].wz].r; j++)a[j].num+=c;
for(int j=r; j>=bl[a[r].wz].l; j--)a[j].num+=c;
for(int j=a[l].wz+1; j<a[r].wz; j++)bl[j].la+=c;
update(a[l].wz);
update(a[r].wz);
}
}else{
int ans=0;
c*=c;
if(a[l].wz==a[r].wz){
for(int j=l; j<=r; j++)if(a[j].num+bl[a[j].wz].la<c)ans++;
}else{
for(int j=l; j<=bl[a[l].wz].r; j++)if(a[j].num+bl[a[j].wz].la<c)ans++;
for(int j=r; j>=bl[a[r].wz].l; j--)if(a[j].num+bl[a[j].wz].la<c)ans++;
for(int j=a[l].wz+1; j<a[r].wz; j++){
ans+=int(lower_bound(v[j].begin(),v[j].end(),c-bl[j].la)-v[j].begin());
}
}
printf("%d\n",ans);
}
}
}
听取wa一片……
回复
共 4 条回复,欢迎继续交流。
正在加载回复...