我自己寫的線段樹板子就在hdu和vj上交不了,別人寫的代碼就能交,我的樣例都過了,這是什么原因???
#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const int N=5e4+5;
int a[N],tr[N];
void build_tree(int a[],int tr[],int node,int st,int ed){
if(st==ed){
tr[node]=a[st];
return;
}
int l_node=node*2+1;
int r_node=node*2+2;
int mid=(st+ed)>>1;
build_tree(a,tr,l_node,st,mid);
build_tree(a,tr,r_node,mid+1,ed);
tr[node]=tr[l_node]+tr[r_node];
}
void update(int a[],int tr[],int node,int st,int ed,int id,int val){
if(st==ed){
a[id]+=val;
tr[node]=a[id];
return;
}
int mid=(st+ed)>>1;
int l_node = node * 2 + 1;
int r_node = node * 2 + 2;
if(id>mid){
update(a,tr,r_node,mid+1,ed,id,val);
}
else update(a,tr,l_node,st,mid,id,val);
tr[node]=tr[l_node]+tr[r_node];
}
int query(int a[],int tr[],int node,int st,int ed,int l,int r){
int mid=(st+ed)>>1;
int l_node = node * 2 + 1;
int r_node = node * 2 + 2;
if(r<st||l>ed) return 0;
else if(st>=l&&ed<=r) return tr[node];//若[st,ed]在[l,r]范圍內直接回傳該值.
int l_sum=query(a,tr,l_node,st,mid,l,r);
int r_sum=query(a,tr,r_node,mid+1,ed,l,r);
return l_sum+r_sum;
}
int main(){
int t,kase=0;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
memset(tr,0,sizeof tr);
build_tree(a,tr,0,1,n);
//for(int i=0;i<n;i++) printf("tr[%d]=%d\n",i,tr[i]);
printf("Case %d:\n",++kase);
char c[15];
while(scanf("%s",c)){
int i,j;
if(!strcmp(c,"Query")){
scanf("%d%d",&i,&j);
printf("%d\n",query(a,tr,0,1,n,i,j));
}
else if(!strcmp(c,"Add")){
scanf("%d%d",&i,&j);
update(a,tr,0,1,n,i,j);
}
else if(!strcmp(c,"Sub")){
scanf("%d%d",&i,&j);
update(a,tr,0,1,n,i,-j);
}
}
}
return 0;
}
來個大大幫我看看這是為什么,難道是我代碼寫的有問題??這題是hdu1166
uj5u.com熱心網友回復:
我一提交,網頁連接失效了???這是什么問題????提交其他型別的題目就沒問題,就線段樹題目就不行。uj5u.com熱心網友回復:
0_0_33084192_29606.cpp(31) : fatal error C1075: 與左側的 大括號“{”(位于“0_0_33084192_29606.cpp(23)”)匹配之前遇到檔案結束。。。 我的兩個線段樹代碼 都有這個東西,這是為什么????轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77429.html
標籤:C++ 語言
上一篇:收到一封盜QQ的郵件
