hdu-5475 An easy problem---线段树+取模
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5475
题目大意:
给X赋初值1,然后给Q个操作,每个操作对应一个整数M;
如果操作是1则将X乘以对应的M,
如果是2则除以第M次操作对应的M',求每次操作后X的值对给定值取摸的结果。
解题思路:
第一眼看这道题,以为就是水题,直接模拟暴力呀,但是发现这样是错误的,因为这里有除法,对除法取模,就应该是逆元,但是逆元不一定存在
想了之后发现可以用线段树保存每一个要乘以的数字,对于操作一就加入数字即可,操作二就对第M次操作的数字进行标记,不让他参与乘法运算,每次输出tree[1]的值就可以了。
线段树维护两个值,一个为标记,一个是区间内的数字的积,对于操作一,更新叶节点,并且更新其父节点。对于操作2也是更新叶节点,标记他,更新父节点时,不让标记过的叶节点参与乘法运算。
#include<bits/stdc++.h>
#define MID(l, r) (l + (r - l) / 2)
#define lc (o<<1)
#define rc (o<<1|1)
using namespace std;
typedef long long ll;
int n, m;
const int maxn = + ;
struct node
{
bool flag;
ll num;
int l, r;
}tree[maxn << ];
void build(int o,int l, int r)
{
tree[o].l = l, tree[o].r = r;
tree[o].flag = ;
if(l == r)
{
tree[o].num = ;
return;
}
int m = MID(l ,r);
build(lc, l, m);
build(rc, m + , r);
tree[o].num = ;
if(tree[lc].flag)tree[o].num = tree[o].num * tree[lc].num % m;
if(tree[rc].flag)tree[o].num = tree[o].num * tree[rc].num % m;
}
int flag;
int p, v;
void update(int o)
{
if(tree[o].l == tree[o].r)
{
if(flag)
{
tree[o].flag = ;
tree[o].num = v;
}
else
{
tree[o].flag = ;
}
return;
}
if(p <= tree[lc].r)update(lc);
else update(rc);
tree[o].num = ;
if(tree[lc].flag)tree[o].num = tree[o].num * tree[lc].num % m;
if(tree[rc].flag)tree[o].num = tree[o].num * tree[rc].num % m;
}
int main()
{
int T, cases = ;
cin >> T;
while(T--)
{
printf("Case #%d:\n", ++cases);
scanf("%d%d", &n, &m);
int a, b;
build(, , n);
for(int i = ; i <= n; i++)
{
scanf("%d%d", &a, &b);
if(a == )
{
flag = ;
p = i, v = b;
}
else
{
flag = ;
p = b;
}
update();
printf("%lld\n", tree[].num);
}
}
return ;
}
hdu-5475 An easy problem---线段树+取模的更多相关文章
- HDU 5475 An easy problem 线段树
An easy problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- 2015上海网络赛 HDU 5475 An easy problem 线段树
题意就不说了 思路:线段树,维护区间乘积.2操作就将要除的点更新为1. #include<iostream> #include<cstdio> #include<cstr ...
- hdu 5475 An easy problem(暴力 || 线段树区间单点更新)
http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...
- hud-5475 An easy problem(线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=5475 An easy problem Time Limit: 8000/5000 MS (Java/Others ...
- hdu 4291 A Short problem(矩阵+取模循环节)
A Short problem Time Limit: 2000/1000 MS (J ...
- Gym 101201J Shopping (线段树+取模)
题意:给定 n 个物品,然后有 m 个人买东西,他们有 x 元钱,然后从 l - r 这个区间内买东西,对于每个物品都尽可能多的买,问你最少剩下多少钱. 析:对于物品,尽可能多的买的意思就是对这个物品 ...
- hdu 5443 The Water Problem 线段树
The Water Problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- HDU.5692 Snacks ( DFS序 线段树维护最大值 )
HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...
随机推荐
- The Add-in 'VMDebugger' failed to load or caused an exception.....的解决办法
异常如图: 解决办法: (把VS的设置导出来,做出相应修改后,再导入,问题就可以解决了) 1. 在Visual Studio中选择 Tools --> Import and Export Set ...
- jquery.form.js ie 下下载文件已经ie8失效问题解决方案
https://github.com/malsup/form/blob/master/jquery.form.js在使用这个插件时遇到的问题1.ie下会变成下载文件,解决方案是在后端返回时设置'Con ...
- 获取两个List中的不同元素,4种方法,逐步优化,学习使用
完全复制https://www.cnblogs.com/czpblog/archive/2012/08/06/2625794.html 先上测试结果 代码 package com.syl.test; ...
- jquery 使用整理机制
短路表达式 与 多重短路表达式 短路表达式这个应该人所皆知了.在 jQuery 中,大量的使用了短路表达式与多重短路表达式. 短路表达式:作为"&&"和" ...
- jquery 使用整理
1. 如何创建嵌套的过滤器 //允许你减少集合中的匹配元素的过滤器, //只剩下那些与给定的选择器匹配的部分.在这种情况下, //查询删除了任何没(:not)有(:has) //包含class为“se ...
- RabbitMQ - 任务队列
这次我们试着实现这样一个小程序: 嗯,就是任务队列(task queue).不是将任务集中在一堆并一直等到所有任务一并完成为止,而是将每一个任务封装为一个消息,并将其发送到队列,后台的workers就 ...
- Activiti工作流小序曲
一般涉及到OA.ERP等公司办公系统都必须有一套办公流程,这时候使用activiti工作流框架会大大减轻我们的工作量,提高我们的开发效率. Activiti工作流简单介绍: 工作流(workflow) ...
- maven仓库中的LastUpdated文件删除脚本
cleanLastUpdated.bat(windows版本) @echo off rem create by NettQun rem 这里写你的仓库路径 set REPOSITORY_PATH=D: ...
- 各种常用的JSON接口
这里为大家搜集了一些能够返回JSON格式的服务接口.部分需要用JSONP调用. 其中一些接口提供用例参照:http://www.bejson.com/webInterface.php 天气接口 气象局 ...
- Scrapy爬虫requests
requests 模块 模块的由来: 浏览器可以浏览网站, 是由于浏览器发送了requests , 各种请求.打开一个网站可能有几十到几百个请求. 从而服务器端会反馈各种因应不同请求生成的数据. 我们 ...