今天才知道,a[i++]到底是什么意思;;

其实也很简单了,就是a[i]的值还是a[i],然后i自增1;

把这篇博客当作平常各种错题博客吧,把各种从网上抄的代码不懂的地方写到这个地方算了

====================================================================

8.10

今天看到一个神奇的库叫做<queue>

没错这个库可以直接调用优先队列

优先队列可以优先调用一个参数,这个就比较人性化了

priority_queue<int>q1;
priority_queue<pair <int,int> >p2;//注意尖括号之间有间隔;
priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队列

上面这个就定义了三个q1,p2,q3

====================================================================

8.12

RMQ问题:区间最值问题,可以使用单调队列,以及线段树,顺便贴一下从网上找来的和RMQ 问题紧密联系的st算法:

/*网址http://blog.sina.com.cn/s/blog_6e63f59e0101598a.html

点击打开链接

ST算法的原理就是,nlogn预处理出Min[][]和Max[][],查询的时候O(1)查询。

Max[j][i]或Min[j][i]代表,从j的位置开始,长度为2^i的子段中的最大值或最小值。

然后预处理的时候递推。

询问的时候先算出[l,r]的长度的2的对数,然后取出答案即可。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
#define mx 100010
int Min[mx][20],Max[mx][20],n,m,a[mx]; void makermq(){
for (int i = 1;i <= n;i ++) Min[i][0] = Max[i][0] = i; for (int i = 1;(1 << i) <= n;i ++){
for(int j = 1;j + (1 << i) - 1 <= n;j ++){
int p = Min[j][i - 1],q = Min[j + (1 << i - 1)][i - 1];
if (a[p] < a[q] || (a[p] == a[q] && p < q)) Min[j][i] = p;
else Min[j][i] = q;
p = Max[j][i - 1],q = Max[j + (1 << i - 1)][i - 1];
if (a[p] > a[q] || (a[p] == a[q] && p < q)) Max[j][i] = p;
else Max[j][i] = q;
}
}
} int ask(int l,int r,int q){
int tmp = int(log(r - l + 1) / log(2));
int k1,k2; if (q == 0){
k1 = Min[l][tmp],k2 = Min[r - (1 << tmp) + 1][tmp];
if (a[k1] < a[k2] || (a[k1] == a[k2] && k1 < k2)) return k1;
else return k2;
}
else{
k1 = Max[l][tmp],k2 = Max[r - (1 << tmp) + 1][tmp];
if (a[k1] > a[k2] || (a[k1] == a[k2] && k1 < k2)) return k1;
else return k2;
}
} int main(){
cin >> n >> m;
for (int i = 1;i <= n;i ++) cin >> a[i]; makermq(); int l,r,q;
for (int i = 1;i <= m;i ++){
cin >> l >> r >> q;
cout << ask(l,r,q) << endl;
}
}

===============================================

上面这个纯属一时兴起,对于现在的我来说并无卵用(至少现在我是蒟蒻),还不如来点现实的填坑

今天主攻归并,发现一个网站有演示归并排序的一段动画,可以调节速度(唯一的槽点就是广告)

http://www.atool.org/sort.php

归并排序作为分治的基本应用,它比较神奇的地方就在于要把整个数据拆分成很多个小数据,小数据进行排序,小数据排序完以后,把他们放到稍大一点的数组中,再次进行排序,但明明感觉这样为何这么慢呢。。。

例题

jzabc除了对多米诺骨牌感兴趣外,对赛车也很感兴趣。上个周末他观看了一场赛车比赛。他总是能想出许多稀奇的问题。某一时刻,他看到有n辆车(总是匀速行驶)在同一直线上,并且处在一个无限长度的直道上,而且n辆车有严格的先后之分。他通过特殊的器材测出了每一辆车的速度。那么问题出现了,如果有两辆车A车和B车,A车在B车的后面,并且A车的速度比B车的快,那么经过一段时间后,A车一定会超过B车。我们称之为一次超车。那么他想请你帮忙计算超车总数。我们记车道起点的坐标为0。没有两辆车的坐标相同。

代码以及高能注释,有错希望各位大牛帮忙指正

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=300100;
int n,sum=0;
int c[N];
struct car
{
int road;
int v;
}cars[N];
bool cmp(car a,car b)
{
return a.road>b.road;
}
void work(int zuo,int you)
{
int zhong,x,i,j;//i,j为方便比较定义为局部变量,每层比较的时候i,j都表示车的坐标,
//x用来临时存储←
if(you > zuo +1)
{
zhong = (you + zuo) /2;
work(zuo,zhong);//递归到最底层
work(zhong+1,you);
x=zuo;
for(i=zuo,j=zhong+1;i<=zhong&&j<=you;)//注意这个归并过程i就是左,j就是右,i,j就是临时的左右,这里其实也是二分的一种表现
{
if(cars[i].v>cars[i].v)//出现逆序对
{
c[x]=cars[j].v;//c用来储存现在正在排序的集
x++;j++;//更改指针
sum+=zhong-i+1;//sum也就是超了几辆车!!!!
}
else
c[x++]=cars[i++].v;//没出现逆序对就让缓冲区的上
}
if(j<=you)
for(;j<=you;j++)
c[x]=cars[j].v,x++;//缓冲区存的是已经排好序的,直接替换
if(i<=zhong)
for(;i<=zhong;i++)
c[x]=cars[i].v,x++;
for(i=zuo;i<=you;i++)
cars[i].v=c[i];
}
else//如果右没有左边大
{
if(zuo+1==you&&cars[zuo].v>cars[you].v);
{
swap(cars[zuo].v,cars[you].v);
sum++;
}
}
} int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>cars[i].road>>cars[i].v;
}
sort(cars+1,cars+n+1,cmp);
work(1,n); //从一到n的排序
cout<<sum<<endl;
return 0;
}

==============================================================================================

8.14

今天新get√一个新技能叫做typedef

这个新技能主要在于使用超长的类型

比如说定义一个longlong就可以写成

typedef long long ll;

然后后面定义的就可以写成

ll cows[N];

我知道这种知识我现在才掌握有点台湾,他在码奇葩长的代码的时候还是挺使用的

好吧话不多说继续写题

PS:今天还是第一次晚上来机房呢

随机推荐

  1. Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final

    Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final

  2. Mysql 表约束 非空、唯一、主键、自增长、默认、外键约束(基础6)

    非空(not null).唯一(unique key).主键(primary key).自增长(auto_increment).默认约束(default) 准备基础环境: mysql> crea ...

  3. jquery mobil 和页面适应

    <meta name="viewport" content="width=device-width" />

  4. 过滤sql特殊字符方法集合

    /// <summary>     /// 过滤不安全的字符串    /// </summary>     /// <param name="Str" ...

  5. 15种css居中方式

    1 水平居中 1.1 内联元素水平居中 利用 text-align: center 可以实现在块级元素内部的内联元素水平居中.此方法对内联元素(inline), 内联块(inline-block), ...

  6. 单例&多线程

    单例模式,最常见的就是饥饿模式,和懒汉模式,一个直接实例化对象,一个在调用方法时进行实例化对象.在多线程模式中,考虑到性能和线程安全问题,我们一般选择下面两种比较经典的单例模式,在性能提高的同时,又保 ...

  7. 【jquery】checkbox

    jquery操作checkbox 模拟选中: $('#aaa').prop('checked', true); 模拟取消选中: $('#aaa').prop('checked', false); 其它 ...

  8. [Java学习]面向对象-类的继承;方法覆盖

    一.类的继承 实现方法: public Class SubClass extends SuperClass{ } 继承最基本作用: 代码重用. 继承最重要的作用: 方法可以重写. 关于类的继承: 子类 ...

  9. 【Linux 线程】常用线程函数复习《一》

    1.pthread_create以及pthread_self函数 /****************************************************************** ...

  10. stark组件之注册【模仿Django的admin】

    一.先看下django的admin是如何实现注册功能 首先导入admin这个对象和我们的model模块 from django.contrib import admin # Register your ...