问题描述
- 杭电amc hdu4027 Runtime Error (ACCESS_VIOLATION) 求看!
-
#include
#include
#include
#include
using namespace std;
struct nod{
int l;
int r;
int flag;
int64 data;
};
int n,tem,m,a,b,c;
__int64 ans[100010];
__int64 sum;
struct nod tree[400040];
void maintain(int node){
tree[node].data=tree[node*2].data+tree[node*2+1].data;
tree[node].flag=tree[node*2].flag||tree[node*2+1].flag;
}
void build(int node,int l,int r){
tree[node].l=l;
tree[node].r=r;
tree[node].flag=1;
if(l==r){
tree[node].data=ans[l];
if(ans[l]<=1)tree[node].flag=0;
return;
}
int mid=(tree[node].l+tree[node].r)/2;
build(node*2,l,mid);
build(node*2+1,mid+1,r);
maintain(node);
}
void update(int node,int l,int r){
if(tree[node].flag==0)return;
if(tree[node].l==tree[node].r&&tree[node].l==l&&tree[node].r==r){
tree[node].data=(int64)sqrt(1.0*tree[node].data);
if(tree[node].data<=1)tree[node].flag=0;
return ;
}
int mid=(tree[node].l+tree[node].r)/2;
if(r<=mid)
update(node*2,l,r);
else if(l>mid)
update(node*2+1,l,r);
else {
update(node*2,l,mid);
update(node*2+1,mid+1,r);
}
maintain(node);
}
void query(int node,int l,int r){
if(tree[node].l==l&&tree[node].r==r){
sum+=tree[node].data;
return;
}
int mid=(tree[node].l+tree[node].r)/2;
if(r<=mid)
query(node*2,l,r);
else if(l>mid)
query(node*2+1,l,r);
else {
query(node*2,l,mid);
query(node*2+1,mid+1,r);
}
}
int main(){
int count = 1;
while(scanf("%d",&n)!=EOF){
memset(ans,0,sizeof(ans));
for(int i = 1;i <= n; i++){
scanf("%ld",&ans[i]);
}
build(1,1,n);
scanf("%d",&m);
printf("Case #%d:n",count++);
for(int i = 1;i <= m; i++){
scanf("%d%d%d",&a,&b,&c);
if(a==0){
update(1,b,c);}
if(a==1){
sum=0;
query(1,b,c);
printf("%I64dn",sum);}}}}
解决方案
都输入什么了,出错?
时间: 2024-11-28 20:26:14