int函数

线段树专题

北城余情 提交于 2020-03-30 12:03:51
线段树的风格是跟 NotOnlySuccess 学的 单点更新 :最最基础的线段树,只更新叶子节点,然后把信息用PushUP(int r)这个函数更新上来 1、 hdu1166 敌兵布阵 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了。A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况。由于采取了某种先进的监测手段,所以每个工兵营地的人数C国都掌握的一清二楚,每个工兵营地的人数都有可能发生变动,可能增加或减少若干人手,但这些都逃不过C国的监视。 中央情报局要研究敌人究竟演习什么战术,所以Tidy要随时向Derek汇报某一段连续的工兵营地一共有多少人,例如Derek问:“Tidy,马上汇报第3个营地到第10个营地共有多少人!”Tidy就要马上开始计算这一段的总人数并汇报。但敌兵营地的人数经常变动,而Derek每次询问的段都不一样,所以Tidy不得不每次都一个一个营地的去数,很快就精疲力尽了,Derek对Tidy的计算速度越来越不满:"你个死肥仔,算得这么慢,我炒你鱿鱼!”Tidy想:“你自己来算算看,这可真是一项累人的工作!我恨不得你炒我鱿鱼呢!”无奈之下,Tidy只好打电话向计算机专家Windbreaker求救,Windbreaker说:“死肥仔,叫你平时做多点acm题和看多点算法书

POJ 3468 A Simple Problem with Integers 线段树 区间更新 区间查询

假如想象 提交于 2020-03-30 10:35:32
  题目链接: http://poj.org/problem?id=3468   题目描述: 一组数列, 可进行一段区间加上某一个数, 和区间查询    解题思路: 线段树, 之前的那道题是求总区间直接输出sum[1] 就可以了, 这次有了区间查询, 同理, 查询的时候Pushdown   代码: #include <iostream> #include <cstdio> #include <string> #include <vector> #include <map> #include <cstring> #include <iterator> #include <cmath> #include <algorithm> #include <stack> #include <deque> #include <map> #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 typedef long long LL; using namespace std; int cases; const int maxn = 1e5+100; int n; int q; LL sum[maxn<<2]; LL add[maxn<<2]; char op[4]; void pushUp( int rt ) { sum[rt] = sum[rt<

const常量赋初值问题

对着背影说爱祢 提交于 2020-03-30 06:45:21
不知从什么时候开始,脑海中总有一个印象,const常量在赋初值时,必须是编译期间可见的值,比如曾经认为: const int cval = 5; 这样的初始化赋值才是正确的,如果使用一个变量或者调用函数给const常量赋初值,则是错误的。今天又好好试了下const的赋初值,结果发现自己曾经的理解是错误的,看下面的程序: #include <iostream> using namespace std; int getVal(int value) { return ++value; } int main() { int value = 0; const int cvar = getVal(value); cout << "Value of cval is: " << cvar << endl; return 0; } 编译是可以通过的。这说明,给const赋初值并不一定要求该值在编译期可见,但是必须在定义const常量的时候为其赋初值,并且之后不能再赋值。 来源: https://www.cnblogs.com/kadinzhu/archive/2011/05/08/2040513.html

C++ —— 类的基础

别来无恙 提交于 2020-03-30 05:56:03
C++类的设计与基础 2015.9.11 1、变量和常量的命名:确定程序中的变量、常量、函数的名字都是具有描述性的名字,具有直接的意义。如numberOfStudent 比 numOfStuds好。 2、类名:当自定义一个类时,应该将类名中的每一个单词的首字母大写。例如Circle、Rectangle等都是好的类名。C++库中的类名都是小写形式。这样易于区分这两种不同的类。对象的命名可参照变量。 3、Circle circle1() 是错误的。正确如下:   Circle circle1;   Circle cirlce2(3); 4、circle1 = Circle(); //这句 使用无参构造函数创建一个对象,然后浅复制给circle1. 5、匿名对象:对象只使用一次可以用匿名对象,如 circle().getArea 、circle(3).getArea. 6、C++库中的 string 类常用方法:【深入学习string: http://www.cnblogs.com/aduck/articles/2246168.html 】 +string()   +string(value:string)   +string(value:char[])   +string(ch:char, n:int)   +append(s:string)   +append(s:string,

定时器

半腔热情 提交于 2020-03-30 01:06:18
在一个应用程序中,要制作一个在某个时间点触发时间。比如说:在每天的11:点去插入一条语句。下面是.net1.1中的示例。 Global.asax.cs using System; using System.Collections; using System.ComponentModel; using System.Web; using System.Web.SessionState; using System.Timers; namespace Kaoqin { /// <summary> /// Global 的摘要说明。 /// </summary> public class Global : System.Web.HttpApplication { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.IContainer components = null; public Global() { InitializeComponent(); } protected void Application_Start(Object sender, EventArgs e) { System.Timers.Timer aTimer = new System.Timers.Timer();

面试题五十五:二叉树的深度

[亡魂溺海] 提交于 2020-03-29 17:47:00
从根节点到叶子点的最长路径上的结点数为深度 方法:根据树的特性,比较左右子树,选那个长的加1;大问题小化递归计算 int TreeDepth(BinaryTreeNode pNode){ //边界,叶子的下一个返回0 if(pNode==null ) return 0; int L= TreeDepth( pNode.L )+1; int R=TreeDepth( pNode.R)+1; return (L>R)?L:R; } 题目二:判断是否是平衡二叉树 左右子树深度差不超过一 方法一:判断左右子树的深度后做差,进行判断.重复计算过多。性能不佳 bool Isbalanced (BinaryTreeNode pNode){ if(pNode==null) return true; int L= TreeDepth( pNode.L ); int R=TreeDepth( pNode.R); if(L-R>1||L-R<-1) return false; return Isbalanced(pNode.L) && Isbalanced(pNode.R); } 方法二:用后序遍历的方式遍历每一个节点,在遍历每一个节点的时候记录它的深度,一边遍历一边判断,需要给函数一个表示深度的变量 来源: https://www.cnblogs.com/niliuxiaocheng/p

C++之指向函数的指针

淺唱寂寞╮ 提交于 2020-03-29 09:57:34
1 #include <iostream> 2 #include <string> 3 //#include "Sales_item.h" 4 #include "Sales_item.cpp" 5 6 using namespace std; 7 //使用typedef简化定义 8 typedef bool (*pf)(const string &s1,const string &s2); 9 typedef int (*PF)(int *, int); 10 11 12 bool length(const string &s1,const string &s2) 13 { 14 return s1.size()==s2.size(); 15 } 16 17 void useBigger(const string &s1,const string &s2,bool (*pf)(const string &s1,const string &s2)) 18 { 19 cout<<length(s1,s2)<<endl; 20 } 21 //ff是一个函数名 有一个形参 x 返回的结果为一个函数指针int(*)(int *,int) 22 //int (*ff(int x))(int *, int) 23 //{ 24 // 25 //} 26 //等同于上边的定义 27 //PF(

CCF 2016-12 送货

柔情痞子 提交于 2020-03-29 09:14:02
问题描述 试题编号: 201512-4 试题名称: 送货 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   为了增加公司收入,F公司新开设了物流业务。由于F公司在业界的良好口碑,物流业务一开通即受到了消费者的欢迎,物流业务马上遍及了城市的每条街道。然而,F公司现在只安排了小明一个人负责所有街道的服务。   任务虽然繁重,但是小明有足够的信心,他拿到了城市的地图,准备研究最好的方案。城市中有n个交叉路口,m条街道连接在这些交叉路口之间,每条街道的首尾都正好连接着一个交叉路口。除开街道的首尾端点,街道不会在其他位置与其他街道相交。每个交叉路口都至少连接着一条街道,有的交叉路口可能只连接着一条或两条街道。   小明希望设计一个方案,从编号为1的交叉路口出发,每次必须沿街道去往街道另一端的路口,再从新的路口出发去往下一个路口,直到所有的街道都经过了正好一次。 输入格式   输入的第一行包含两个整数n, m,表示交叉路口的数量和街道的数量,交叉路口从1到n标号。   接下来m行,每行两个整数a, b,表示和标号为a的交叉路口和标号为b的交叉路口之间有一条街道,街道是双向的,小明可以从任意一端走向另一端。两个路口之间最多有一条街道。 输出格式   如果小明可以经过每条街道正好一次,则输出一行包含m+1个整数p 1 , p 2 , p 3 , ..., p m +1

使用指针传递二维数组参数

早过忘川 提交于 2020-03-29 09:11:11
  在c语言中,有的时候会需要传递一个二维数组给函数。然而直接传递二维数组并不像传递一维数组那样容易,我们最好是借用指针来传递二维数组。   要用指针传递二维数组,则必须对二维数组的储存方式有个了解。二维数组在内存中其实也是按照一个序列来排列的,毕竟内存只有高低之分,只有一个方向。因此,二维数组的储存实现是一行行来存储的,存完一行再存下一行,并且是紧挨着存储。   比如定义int a[3][4],那么每行有4个数,一共3行。用指针p来表示数组,int *p;*p = &a[0][0],那么要用p表示a[2][1],就是*(p+2*4+1),这样就能通过传递指针p和表示二维数组长度的数来传递二维数组。 1 /*测试用指针传递二维数组*/ 2 /*by telnetning 13.3.20*/ 3 4 #include <stdio.h> 5 6 /*函数求二维数组所有的数的和的大小*/ 7 int Sum(int *p,int i,int j){ 8 int m; 9 int n; 10 int s; 11 for(n=0;n<=i;n++){ 12 for(m=0;m<=j;m++){ 13 s=*(p+(n*3)+m); 14 } 15 } 16 return s; 17 } 18 int main(){ 19 int s; 20 int a[3][3]; 21 int i,j;

互评:数据结构、算法及线性表总结

依然范特西╮ 提交于 2020-03-28 17:46:30
一.思维导图 二 . 重要概念的笔记 1.循环队列 front=(front+1)%maxsize rear=(rear+1)%maxsize; 队列元素个数=(front-rear+maxsize)%maxsize; 2.随机存储取元素地址 position=a[0]+(i-1)*sizeof(Elementype); 3.递归算法时间复杂度 思路:列出T(k)的函数 例1 int fact(int n) { if(n<=1) return 1; else return n*fact(n-1); } T(k)=1 当k=1 T(k)=1+T(k-1) 当 k≠1 则: T(n)=1+T(n-1) =1+1+T(n-2) =1+1+....+T(1) =n =O(n) 例2 void mergesort(int a[],int i,int j){ int m; m=(i+j)/2; if(i!=j){ mergesort(a,i,m); mergesort(a,m+1,j); merge(a,i,j,m); } } o(nlg2n) T(k)=O(1) 当k=1 T(k)=2T(k/2)+O(k) 当 k≠1 T(N)=2T(N/2)+N=2(2T((n/4)+N/2)+N=......=2^k(T(n/2^K))+kn 当N=2^k 即k=log2 n T(N)=n+nlog2n