题意:

两个操作:① 当为1时 ,乘上后面的数

② 当为2时,除以第x次乘的数

还说了2操作后面的n不会重复(就这明显看出线段树- -,然而并没有看出来,还是靠的队友)

1则对每个节点赋值,2则将相应的点改为一,每次操作后进行一次询问

#include <cstdio>
#define MAXN 100010
using namespace std; long long m,ans[MAXN],q[MAXN],tree[MAXN*50];
int n;
long long build(int l,int r,int rt)
{
if(l==r) return(tree[rt]=q[l]>1?q[l]:1);
int mid=(l+r)/2;
return tree[rt]=(build(l,mid,rt*2)*build(mid+1,r,rt*2+1))%m;
}
long long change(int l,int r,int rt,int x)
{
if(l==r)return tree[rt]=1;
int mid=(l+r)/2;
if(x<=mid)return tree[rt]=(change(l,mid,rt*2,x)*tree[rt*2+1])%m;
else return tree[rt]=(tree[rt*2]*change(mid+1,r,rt*2+1,x))%m;
}
long long query(int l,int r,int rt,int x)
{
if(r==x)return tree[rt];
int mid=(l+r)/2;
if(x>mid)return (tree[rt*2]*query(mid+1,r,rt*2+1,x))%m;
else return query(l,mid,rt*2,x);
}
int main()
{
int T;
scanf("%d",&T);
for(int t=1; t<=T; ++t)
{
scanf("%d%lld",&n,&m);
int op;
ans[0]=1;
for(int i=1; i<=n; i++)
{
ans[i]=1;
scanf("%d%lld",&op,&q[i]);
q[i]%=m;if(op==2)q[i]=-q[i];
}
build(1,n,1);
printf("Case #%d:\n",t);
for(int i=1; i<=n; i++)
{
if(q[i]>=0)ans[i]=(ans[i-1]*q[i])%m;
else
{
change(1,n,1,-q[i]);
ans[i]=query(1,n,1,i);
}
printf("%lld\n",ans[i]);
}
}
return 0;
}

  

hdu 5475(线段树)的更多相关文章

  1. hdu 5475 线段树

    An easy problem Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)

    Weak Pair Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  4. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  5. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  6. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

  7. hdu 4533 线段树(问题转化+)

    威威猫系列故事——晒被子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  8. hdu 2871 线段树(各种操作)

    Memory Control Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  9. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  10. hdu 1542 线段树扫描(面积)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

随机推荐

  1. 201621123031 《Java程序设计》第8周学习总结

    作业08-集合 1.本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2.书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码 ...

  2. 使用 PuTTY 从 Windows 连接到 Linux 实例

    启动您的实例之后,您可以连接到该实例,然后像使用您面前的计算机一样来使用它. Note 启动实例后,需要几分钟准备好实例,以便您能连接到实例.检查您的实例是否通过了状态检查 - 您可以在 Instan ...

  3. VS2013 重装 无法打开项目

    今天遇到的奇葩BUG,耗时我一下午,现在跟大家说道说道. 今天重装系统,让各种开发环境开发工具自然要重装一次,最后装完VS2013,然后刚好客户打电话要改点东西,然后我就双击项目准备打开改,然后奇葩来 ...

  4. XML之自动生成类,添加,修改,删除类的属性

    1. class ClassHelperDemo { public static void Main() { #region 演示一:动态生成类. //生成一个类t. Type t = ClassHe ...

  5. Python struct模块

    有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重 ...

  6. LeetCode & Q28-Implement strStr-Easy

    String Two Pointers Description: Implement strStr(). Returns the index of the first occurrence of ne ...

  7. 安卓手机USB共享网络给PC上网

    开端 哈哈,最近我又发现了一个校园网的漏洞,但是只能手机连接,于是就想手机连接之后通过usb共享给电脑上网. 在手机上连接校园网WiFi,开启USB网络共享并且连接电脑之后,却发现电脑十分的卡顿!CP ...

  8. orchard-1.9.2-1.10.2汉化

    安装 首先从github上下载orchard源代码:https://github.com/OrchardCMS/Orchard(下载版本最新的1.10.2) 使用vs2017打开源代码,运行进入安装界 ...

  9. 1.1 WEB API 在帮助文档页面进行测试

    这篇文章http://www.cnblogs.com/landeanfen/p/5210356.html写得比较详细, 我就挑简单的来说. 首先用这功能要在WEB API创建的帮助文档下面,如果你使用 ...

  10. JEECG中出现Java.sql.SQLException: Value 'xxxx' can not be represented as java.sql.Timestamp的解决办法

    出现`Java.sql.SQLException: Value 'xxxx' can not be represented as java.sql.Timestamp',其中xxxx部分对应包含一个看 ...