夜空dark吧 关注:26贴子:1,000
  • 1回复贴,共1

【第一发完整的线段树】接受变量名满满的恶意吧!!!!

只看楼主收藏回复

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("aa.in");
int t,n;
int fa[50001],enmy[50001],enkidu[50001];
void Sword_Of_Wrynn(int i,int j,int n1,int n2,int hao){
if(n1==i&&n2==i){
enkidu[hao]+=j;
return;
}
if(i<=(n1+n2)/2){
enkidu[hao]+=j;
Sword_Of_Wrynn(i,j,n1,(n1+n2)/2,hao*2);
}
else{
enkidu[hao]+=j;
Sword_Of_Wrynn(i,j,(n1+n2)/2+1,n2,hao*2+1);
}
}
int Gilgamesh(int k,int n1,int n2,int i,int j){
if(n1==i&&n2==j) return enkidu[k];
if(n1==n2) return enkidu[k];
int ans=0;
if((n1+n2)/2>=j) ans=Gilgamesh(k*2,n1,(n1+n2)/2,i,j);
if((n1+n2)/2+1<=i) ans=Gilgamesh(k*2+1,(n1+n2)/2+1,n2,i,j);
if(i<=(n1+n2)/2&&j>(n1+n2)/2){
ans=Gilgamesh(k*2,n1,(n1+n2)/2,i,(n1+n2)/2);
ans+=Gilgamesh(k*2+1,(n1+n2)/2+1,n2,(n1+n2)/2+1,j);
}
return ans;
}
int Les_Arthur(int l,int r,int k){
if(l==r){
enkidu[k]=enmy[l];
return enmy[l];
}
enkidu[k]=0;
enkidu[k]=Les_Arthur(l,(l+r)/2,k*2)+Les_Arthur((l+r)/2+1,r,k*2+1);
return enkidu[k];
}
void Tain_Bo_Cuailnge(){
fin>>n;
for(int i=1;i<=n;i++) fin>>enmy[i];
}
int main(){
fin>>t;
int b,c;
string a;
for(int i=1;i<=t;i++){
Tain_Bo_Cuailnge();
Les_Arthur(1,n,1);
while(fin>>a>>b>>c){
if(a=="Query") cout<<Gilgamesh(1,1,n,b,c)<<endl;
if(a=="Add") Sword_Of_Wrynn(b,c,1,n,1);
if(a=="Sub") Sword_Of_Wrynn(b,0-c,1,n,1);
}
}
return 0;
}


1楼2015-08-25 20:57回复
    →_→什么鬼


    IP属地:湖北来自Android客户端2楼2015-08-27 13:06
    回复