zoukankan      html  css  js  c++  java
  • HDU 5475:An easy problem 这题也能用线段树做???

    An easy problem

    Time Limit: 8000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 467    Accepted Submission(s): 258


    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.
     

    Input
    The first line is an integer T(1T10), 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. (1Q105,1M109)
    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<y109)
    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.
     

    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
    Case #1: 2 1 2 20 10 1 6 42 504 84

    题意是一台计算器,最开始的数字是1,然后对其不断操作,输入的操作为1时,乘以后面的数y。输入的操作为2时,除以第y次操作的数。问每一次操作后的结果是多少。

    哇,这题居然是线段树做法,真的是没想到啊,发现线段树的题竟然这么广。

    对每一个定点进行更新,对整个线段树求乘积。

    代码:

    #include <iostream>  
    #include <algorithm>  
    #include <cmath>  
    #include <vector>  
    #include <string>  
    #include <cstring>  
    #pragma warning(disable:4996)  
    using namespace std;
    
    struct no
    {
    	int L,R;
    	long long mul;
    }tree[400015];
    
    int root,n;
    long long mod;
    
    void buildtree(int root,int L,int R)
    {
    	tree[root].L=L;
    	tree[root].R=R;
    
    	tree[root].mul=1;
    
    	if(L!=R)
    	{
    		buildtree(root*2+1,L,(L+R)/2);
    		buildtree(root*2+2,(L+R)/2+1,R);
    	}
    }
    
    void insert(int root,int s,int e,long long val)
    {
    	if(tree[root].L==s&&tree[root].R==e)
    	{
    		tree[root].mul=val%mod;
    		return;
    	}
    	if(e<=(tree[root].L+tree[root].R)/2)
    	{
    		insert(root*2+1,s,e,val);
    	}
    	else if(s>=(tree[root].L+tree[root].R)/2+1)
    	{
    		insert(root*2+2,s,e,val);
    	}
    	else
    	{
    		insert(root*2+1,s,(tree[root].L+tree[root].R)/2,val);
    		insert(root*2+2,(tree[root].L+tree[root].R)/2+1,e,val);
    	}
    	tree[root].mul = (tree[2*root+1].mul *  tree[2*root+2].mul)%mod;
    }
    
    int main()
    {
    	//freopen("i.txt","r",stdin);
    	//freopen("o.txt","w",stdout);
    
    	int test,i,j,oper;
    	long long val;
    	scanf("%d",&test);
    	
    	for(i=1;i<=test;i++)
    	{
    		printf("Case #%d:
    ",i);
    		scanf("%d%lld",&n,&mod);
    
    		buildtree(0,1,n);
    		for(j=1;j<=n;j++)
    		{
    			scanf("%d%lld",&oper,&val);
    			if(oper==1)
    			{
    				insert(0,j,j,val);
    			}
    			else
    			{
    				insert(0,val,val,1);
    			}
    			printf("%lld
    ",tree[0].mul);
    		}
    	}
    	//system("pause");
    	return 0;
    }



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/lightspeedsmallson/p/4899557.html
Copyright © 2011-2022 走看看