赵艳敏高级讲师
从事设计行业多年,有着丰富的设计和动画制作经验。曾参与中国电信天翼 手机网及天翼手机DIY等多个项目的设计,动画,及As开发。项目经验丰富。曾在卡酷动画卫视下属公司担任高级动画师一职,参与多部动画片的制作 。对动画也有较高的造诣。
精通Flash、After Effects、Photoshop、Illustrator、ActionScript 2.0/3.0、Edius、CoolEdit、Axure RP、DIV CSS等相关技术。
讲课有自己的风格,思维活跃,条理清晰讲课注重细节,由简入繁。本着以 学生学会为目的,更注重理论与实践相结合。
java入门要注意什么
学习java就像是一个种花的过程,不断地为其施肥浇水,它才会茁壮成长。 而我们学习java,就要不断的充实自己、提升自己,才能获得更多机会。很多开始学习java编程的小白,经常就会被概念、定义什么的搞糊涂。当分类 、对象、接口、构造函数等等各种专业名词出现的时候,你一定是脑子里好像一片空白,根本就搞不懂这些字眼的意思和关系,而且,这种情况下,很 容易导致你丧失自信心,开始逃避、拒绝,这些小白经常遇到的情况在我刚接触java的时候也遇见了,但是好在我足够幸运,遇见了诚筑说。我现在已 经是公司的项目经理了,今天,我为大家来总结了一些经验和建议,希望能够帮助到大家。
一点:熟练基本的j2seAPI
除去java语言本身的语法之外呢,要懂得并且熟练j2seAPI的API也是非常有 必要的,在这里,就建议大家首先去掌握字符串的处理、异常的处理、容器、输入输出、线程等,这些相对来说较为重要的。还有就是API的内容是非 常庞大的,关于API,一定要懂得查询API的文件说明,在了解了其作用用途或者目的才能够进行相对于的程序。
二点:稳固java的语法基础
学习java一定要学会使用java的程序语言,用来编写程序,但是学习程序语 言就要熟悉语法是怎么使用的。程序语言其实也是一种语言,不过跟人类的语言不同,这种语言是要和计算机沟通交流,那怎么做才能熟悉这种语言呢 ,我给出的建议是多看别人写的程序,了解人家是怎么用java来解决问题的。然后再找类似的程序去练习了,这样就能够从实际操作中检验自己是否真 的知道该怎么去解决问题了。
三点:加入贴吧论坛多参与讨论
根据我当时的经验,在大家学习的过程中,如果有人可以参与话题,共同讨 论的话,会加快你学习的速度。所以大家可以和我一样,找一个技术讨论的地方,贴吧啊,论坛啊都可以,在这里进行讨论,毕竟大家有着共同的目标 和理想,有着共同的话题可聊,这样的话,又大大节省了学习的时间。
学完基本的java语法呢,现在就该用java来进行实际的编程了,假如你需要 编写窗口程序,那就学Swing窗口设计;假如你要编写数据库什么的,那就学JDBC等等。
数据库关键技术
.数据库关键技术
-
01Mysql 基础
-
1.Mysql的安装和使用
-
2.图解Mysql程序结构
-
3.Mysql服务器的配置
-
4.Mysql 客户端使用
-
5.用户权限管理
-
6.Mysql数据库的使用
-
02SQL基础
-
1.SQL语句的三种类型
-
2.DML、DDL、DCL的应用
-
3.数据处理
-
4.子查询
-
5.创建和管理表
-
6.约束与分页
-
03JDBC
-
1.JDBC概述
-
2.获取数据库连接
-
3.数据库连接池C3P0 与 DBCP
-
4.使用JDBC 完成数据库DML操作
-
5.大数据的操作
-
6.批量处理与元数据
-
04DBUtils
-
1.使用QueryRunner
-
2.可插拔式结果集处理
-
3.批量处理
-
4.大数据结果集处理
-
5.自定义结果集处理
-
6.利用DBUtils编写通用 DAO
BZOJ 2821 分块 二分
>
题意: N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次。 思路: 把N个数分成sqrt(n)块,预处理d[i][j]表示第i块起点到第j块末尾的答案 枚举起点i,并维护一个数组记录每个数到目前为止出现的次数,从偶变奇、从奇变偶时相应增减答案。 把每个数在数列中出现的位置从小到大排序后放入到一个数组Arr中备用。 读入每个询问[l,r]。如果l和r在同一个块中暴力即可,否则设l所在块的末尾为l’,r所在块的起点为r’,[l’ 1,r’-1]的答案已经预处理出。扫描l~l’, r’~r的所有数,统计每个数出现的次数cnt,**次出现时把它加入队列。 对于队列中的每个数,在数组Arr中二分l’ 1和r’-1,得到在[l’ 1,r’-1]中出现的次数k。**对k和当前队列中的数的cnt进行奇偶性讨论更新答案
(from lyd的题解…)
我们就可以vector lower_bound() 搞定~
(也可以用可持久化线段树之类的东西…)
**后 祝他们幸福……
//By SiriusRen #include <cmath> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=100005; int n,c,m,a[N],Block,block[N],f[1111][1111],vis[N],ans,l,r,stk[N],top; vector<int>vec[N]; int main(){ scanf("%d%d%d",&n,&c,&m),Block=sqrt(n); for(int i=1;i<=n;i )scanf("%d",&a[i]),block[i]=(i-1)/Block 1,vec[a[i]].push_back(i); for(int i=1;i<=block[n];i ){ memset(vis,0,sizeof(vis));int temp=0; for(int j=lower_bound(block,block 1 n,i)-block;j<=n;j ){ vis[a[j]] ; if(vis[a[j]]%2==0)temp ; else if(vis[a[j]]!=1)temp--; if(block[j]!=block[j 1])f[i][block[j]]=temp; } } memset(vis,0,sizeof(vis)); for(int i=1;i<=m;i ){ scanf("%d%d",&l,&r); l=(l ans)%n 1,r=(r ans)%n 1; if(l>r)swap(l,r);ans=0; int L=block[l] 1,R=block[r]; if(L<R){ int ll=lower_bound(block 1,block 1 n,L)-block-1; int rr=lower_bound(block 1,block 1 n,R)-block; R--;top=0; for(int i=l;i<=ll;i )vis[a[i]] ,stk[ top]=a[i]; for(int i=rr;i<=r;i )vis[a[i]] ,stk[ top]=a[i]; ans=f[L][R]; for(int i=1;i<=top;i )if(vis[stk[i]]){ int t=lower_bound(vec[stk[i]].begin(),vec[stk[i]].end(),rr)- lower_bound(vec[stk[i]].begin(),vec[stk[i]].end(),ll 1); if(!t){if(vis[stk[i]]%2==0)ans ;} else if(t%2==0){if(vis[stk[i]]%2==1)ans--;} else if(t%2==1&&vis[stk[i]]%2==1)ans ; vis[stk[i]]=0; } } else{ top=0; for(int i=l;i<=r;i )vis[a[i]] ; for(int i=l;i<=r;i )if(vis[a[i]]){ if(vis[a[i]]%2==0)ans ; vis[a[i]]=0; } } PRintf("%d\n",ans); } }
相关推荐: