HDU 5475 An easy problem
来源:互联网 发布:mp4 元数据 放头部 编辑:程序博客网 时间:2024/06/05 07:47
An easy problem
Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 594 Accepted Submission(s): 343
Problem Description
One day, a useless calculator was being built by Kuros. Let's assume that number X is showed on the screen of calculator. At first, X = 1. This calculator only supports two types of operation.
1. multiply X with a number.
2. divide X with a number which was multiplied before.
After each operation, please output the number X modulo M.
1. multiply X with a number.
2. divide X with a number which was multiplied before.
After each operation, please output the number X modulo M.
Input
The first line is an integer T(1≤T≤10 ), indicating the number of test cases.
For each test case, the first line are two integers Q and M. Q is the number of operations and M is described above. (1≤Q≤105,1≤M≤109 )
The next Q lines, each line starts with an integer x indicating the type of operation.
if x is 1, an integer y is given, indicating the number to multiply. (0<y≤109 )
if x is 2, an integer n is given. The calculator will divide the number which is multiplied in the nth operation. (the nth operation must be a type 1 operation.)
It's guaranteed that in type 2 operation, there won't be two same n.
For each test case, the first line are two integers Q and M. Q is the number of operations and M is described above. (
The next Q lines, each line starts with an integer x indicating the type of operation.
if x is 1, an integer y is given, indicating the number to multiply. (
if x is 2, an integer n is given. The calculator will divide the number which is multiplied in the nth operation. (the nth operation must be a type 1 operation.)
It's guaranteed that in type 2 operation, there won't be two same n.
Output
For each test case, the first line, please output "Case #x:" and x is the id of the test cases starting from 1.
Then Q lines follow, each line please output an answer showed by the calculator.
Then Q lines follow, each line please output an answer showed by the calculator.
Sample Input
110 10000000001 22 11 21 102 32 41 61 71 122 7
Sample Output
Case #1:2122010164250484
Source
2015 ACM/ICPC Asia Regional Shanghai Online
裸的线段树。
单点更新。
#include<stdio.h>#include<iostream>#define lson l,m,rt<<1#define rson m+1,r,rt<<1 | 1using namespace std;const int maxn=100005;const int inf=1<<29;int n,m,t;long long sum[500000],M;void pushup(int rt){ sum[rt]=sum[rt<<1]*sum[rt<<1|1]%M;}void build(int l,int r,int rt){ if(l==r) { sum[rt]=1; return ; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt);}void update(int i,int add,int l,int r,int rt){ if(l==r) { sum[rt]=add; return ; } int m=(l+r)>>1; if(i<=m) update(i,add,lson); else update(i,add,rson); pushup(rt);}long long query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) { return sum[rt]; } int m=(l+r)>>1; long long res=1; if(L<=m) res=(res*query(L,R,lson))%M; if(R>m) res=(res*query(L,R,rson))%M; return res;}int main(){ ios::sync_with_stdio(false); cin>>t; for(int p=1;p<=t;p++) { cout<<"Case #"<<p<<":"<<endl; cin>>n>>M; build(1,n,1); for(int i=1;i<=n;i++) { int op,x; cin>>op>>x; if(op==1) { update(i,x,1,n,1); cout<<query(1,i,1,n,1)<<endl; } else { update(x,1,1,n,1); cout<<query(1,i,1,n,1)<<endl; } } } return 0;}
0 0
- hdu 5475 An easy problem
- HDU 5475 An easy problem
- hdu 5475 An easy problem
- hdu-An Easy Problem
- hdu-An Easy Problem
- hdu 5475 An easy problem(线段树)
- hdu 5475 An easy problem 线段树
- hdu 5475 An easy problem (线段树)
- HDU-5475-An easy problem【线段树】
- hdu 2601 An easy problem
- hdu 2601(An easy problem)
- hdu 2601 An easy problem
- hdu 2601 An easy problem
- HDU 2123 An easy problem
- HDU 2055 An easy problem
- HDU 2123 An easy problem
- hdu 2132 An easy problem
- HDU 2055 An easy problem
- 枚举法
- 模糊查找
- Android 基础5
- ATL窗口(1) (转)
- 使用xml.etree.ElementTree读xml
- HDU 5475 An easy problem
- 这一年----On The Way
- 水
- linux定时任务的设置
- Android内存优化之OOM
- HDU 5478 Can you find it
- 跑马
- java 时间转换 将 util 时间转成 sql 时间
- java基础之集合List、Set、Map的区别