TJOI 2018 수학 계산

Description
팥 은 현재 수 x 가 있 는데 초기 값 은 1 이다.팥 은 Q 회 조작 이 있 고 조작 은 두 가지 유형 이 있다. 1m: x = x×m, x mod M 출력;2 pos: x = x / 두 번 째 pos 작업 에 곱 한 수 (두 번 째 pos 작업 은 반드시 유형 1 이 고 모든 유형 1 의 작업 은 한 번 까지 제 거 됩 니 다), x mod M 을 출력 합 니 다.
Input
모두 t 조 입력 이 있 습 니 다.각 그룹의 입력 에 대해 첫 줄 은 두 개의 숫자 Q, M 이다.다음 Q 줄, 모든 행위 조작 유형 op, 조작 번호 또는 곱 한 숫자 m (모든 입력 이 합 법 적 임 을 보장 합 니 다).
Output
모든 작업 에 대해 한 줄 을 출력 합 니 다. 작업 이 실 행 된 x mod M 의 값 을 포함 합 니 다.
Sample Input
1
10 1000000000
1 2
2 1
1 2
1 10
2 3
2 4
1 6
1 7
1 12
2 7
Sample Output
2
1
2
20
10
1
6
42
504
84
Hint
20% 에 대하 여 의 데이터, 1 ≤ Q ≤ 500 대 100% 의 데이터, 1 ≤ Q ≤ 10 ^ 5, t ≤ 5, M ≤ 10 ^ 9
선분 수 는 누 드 문 제 를 나 누 어 치료 하 는데 유일한 구덩이 점 은 내 가 조작 1 만 조작 하 는 것 이 라 고 생각한다.
또 이 문 제 는 롱 롱 롱 을 열지 않 으 면 터 질 수 있다.
#include
using namespace std;
#define Inc(i,L,R) for(register int i=(L);i<=(R);++i)
#define Red(j,R,L) for(register int j=(R);j>=(L);--j)
#define int long long
const int N = 1e5+10;
int n,p;
struct SegMent{
	struct Tree{
		int L,r,mul;
	}t[N<<2];
	#define Ls v<<1
	#define rs v<<1|1
	inline void build(int v,int L,int r){
		t[v]=(Tree){L,r,1};
		if(L==r)return ;
		int Mid=L+r>>1;
		build(Ls,L,Mid),build(rs,Mid+1,r);
	}
	inline void update(int v,int A,int b,int k){
		if(t[v].L>b||t[v].r

 

좋은 웹페이지 즐겨찾기