tjut 3074

来源:互联网 发布:上海程序员招聘 编辑:程序博客网 时间:2024/06/15 08:41
#include<stdio.h>  #include<string.h>  #include<stdlib.h>  #define Mod 1000000007  #define N 50005  int num[N];  struct cam  {      int x;  //起点      int y;  //终点      __int64 mul; //乘积  }list[N*4];  void build(int k,int x,int y)  {      int mid;      list[k].x=x;      list[k].y=y;      if(list[k].x==list[k].y)      {          list[k].mul=num[x];          return;      }      mid=(x+y)/2;      build(k<<1,x,mid);      build(k<<1|1,mid+1,y);      list[k].mul=(list[k<<1].mul*list[k<<1|1].mul)%Mod;  }  __int64 find(int k,int x,int y)  {      int mid;      if(list[k].x==x&&list[k].y==y)      return list[k].mul;      mid=(list[k].x+list[k].y)/2;      if(x>mid)      return find(k<<1|1,x,y);      else if(y<=mid)      return find(k<<1,x,y);      return (find(k<<1,x,mid)*find(k<<1|1,mid+1,y))%Mod;  }  void update(int k,int x,int y)  {      int mid;      if(list[k].x==x&&list[k].y==x)      {          list[k].mul=y;          return;      }      mid=(list[k].x+list[k].y)/2;      if(x<=mid)      update(k<<1,x,y);      else      update(k<<1|1,x,y);      list[k].mul=(list[k<<1].mul*list[k<<1|1].mul)%Mod;  }  int main()  {      int i,t;      int n,m;      int c,a,b;      scanf("%d",&t);      while(t--)      {          scanf("%d",&n);          for(i=1;i<=n;i++)          scanf("%d",&num[i]);          build(1,1,n);          scanf("%d",&m);          while(m--)          {              scanf("%d %d %d",&c,&a,&b);              if(c==0)              printf("%I64d\n",find(1,a,b));              else              {                  num[a]=b;                  update(1,a,b);              }          }      }      return 0;  }  

0 0
原创粉丝点击