zoukankan      html  css  js  c++  java
  • 树状数组 区间更新 单点求值

    目前来说你点开它是没有任何意义。因为我还不会。。。
    洛谷P3368就是一个区间更新、单点求值的例子。我用的线段树
    做的(加了懒操作),TLE了三个点。
    洛谷有一个神奇的功能,过了60分可以翻看别人的记录,我看了
    看前人有用线段树做的AC了,900多ms。。。
    然后一想,233333333333333333333,我用的cin,所以TLE了。。
    。(是不是一点也不好笑)
    then,我看了看用树状数组AC的,200多ms(他用了scanf,这个时
    候用cin不会TLE),所以我就想着要学习这种黑科技算法。。。

     //================================

    10月11日更新

    先上代码

    #include <iostream>
    using namespace std;
    int c[500001],n,m,t,t1,t2,t3;
    int lowbit(int x)
    {
    	return x&(-x); 
    }
    void sb(int x,int k)
    {
    	for(int i=x;i<=n;i+=lowbit(i))
    		c[i]+=k;
    }
    int get(int x,int ans=0)
    {
    	for(int i=x;i>0;i-=lowbit(i))
    		ans+=c[i];
    	return ans;
    }
    int main()
    {
    	cin >> n >> m;
    	for(int i=1;i<=n;i++)
    	{
    		cin >> t;
    		sb(i,t);
    		sb(i+1,-t);
    	}
    	for(int i=1;i<=m;i++)
    	{
    		cin >> t >> t1;
    		if(t==1)
    		{
    			cin >> t2 >> t3;
    			sb(t1,t3);
    			sb(t2+1,-t3);
    		}
    		else if(t==2)
    			cout << get(t1) << endl;
    	}
    	return 0;
    }
    

     弄这个真是麻烦,上课睡觉都睡不着想着这个。。。等着月考后有空了我再更新吧。大家可以先看这位的博文(然而晦涩难懂)

  • 相关阅读:
    解决Cannot change version of project facet Dynamic web module to 3.0
    mysql 存储过程
    查看建表语句
    mysql query cache 查询缓存
    数据库连接池
    JDBC Statement PrepareStatement
    mysql 改变表结构 alter
    maven 获取pom.xml的依赖---即仓库搜索服务
    windows常用快捷键
    oracle 的数据完整性
  • 原文地址:https://www.cnblogs.com/oier/p/5936612.html
Copyright © 2011-2022 走看看