Bestcoder #21

2014-12-07 01:06:20

A题,水。。。吐槽下题解的逗比做法- =

B题:转为离线后排序,用滚动变量来做。

 1 /*************************************************************************
 2     > File Name: 1002.cpp
 3     > Author: Nature
 4     > Mail: 564374850@qq.com 
 5     > Created Time: Sat 06 Dec 2014 08:12:31 PM CST
 6 ************************************************************************/
 7 
 8 #include <cstdio>
 9 #include <cstring>
10 #include <cstdlib>
11 #include <cmath>
12 #include <vector>
13 #include <map>
14 #include <set>
15 #include <stack>
16 #include <queue>
17 #include <iostream>
18 #include <algorithm>
19 using namespace std;
20 #define lp (p << 1)
21 #define rp (p << 1|1)
22 #define getmid(l,r) (l + (r - l) / 2)
23 #define MP(a,b) make_pair(a,b)
24 typedef long long ll;
25 const int INF = 1 << 30;
26 const ll mod = 1000000007;
27 
28 ll ta[100010],t,f;
29 int cnt,n;
30 struct node{
31     int val,pos;
32 }b[100010];
33 
34 bool cmp1(node a,node b){
35     return a.val < b.val;
36 }
37 
38 bool cmp2(node a,node b){
39     return a.pos < b.pos;
40 }
41 
42 int main(){
43     t = f = 1;
44     while(scanf("%d",&n) != EOF){
45         b[++cnt].val = n;
46         b[cnt].pos = cnt;
47     }
48     sort(b + 1,b + cnt + 1,cmp1);
49     for(int i = 1; i <= cnt; ++i){
50         for(int j = b[i - 1].val + 1; j <= b[i].val; ++j){
51             f = (f * j) % mod;
52             t = (t * f) % mod;
53         }
54         ta[b[i].pos] = t;
55     }
56     sort(b + 1,b + cnt + 1,cmp2);
57     for(int i = 1; i <= cnt; ++i){
58         printf("%I64d\n",ta[i]);
59     }
60     return 0;
61 }

C题,线段树啥的?

D题:用线段树 / BIT 优化LIS到nlogn,dp[i]表示以i为终点的最长LIS长度,同时要存下这个最长LIS的最右起点(思考)

  调了半天....发现最后有个乘法爆int T T!

 1 /*************************************************************************
 2     > File Name: 1004.cpp
 3     > Author: Nature
 4     > Mail: 564374850@qq.com 
 5     > Created Time: Sat 06 Dec 2014 08:17:34 PM CST
 6 ************************************************************************/
 7 
 8 #include <cstdio>
 9 #include <cstring>
10 #include <cstdlib>
11 #include <cmath>
12 #include <vector>
13 #include <map>
14 #include <set>
15 #include <stack>
16 #include <queue>
17 #include <iostream>
18 #include <algorithm>
19 using namespace std;
20 #define lp (p << 1)
21 #define rp (p << 1|1)
22 #define getmid(l,r) (l + (r - l) / 2)
23 #define MP(a,b) make_pair(a,b)
24 typedef long long ll;
25 const int INF = 1 << 30;
26 const int maxn = 100010;
27 
28 int n;
29 int v[maxn];
30 int cp[maxn];
31 
32 typedef pair<int,int> pii;
33 
34 pii dp[maxn];
35 
36 struct BIT{
37     pii c[maxn];
38     //void Init(){
39     //    fill_n(c + 1,n,pii(0,0));
40     //}
41     int Lowbit(int x){
42         return x & (-x);
43     }
44     void Update(int x,pii t){
45         while(x <= maxn){
46             c[x] = max(t,c[x]);
47             x += Lowbit(x);
48         }
49     }
50     pii Getmax(int x){
51         pii res(0,0);
52         while(x > 0){
53             res = max(res,c[x]);
54             x -= Lowbit(x);
55         }
56         return res;
57     }
58 };
59 
60 int main(){
61     while(scanf("%d",&n) != EOF){
62         BIT B;
63         //B.Init();
64         for(int i = 1; i <= n; ++i){
65             scanf("%d",&v[i]);
66             cp[i] = v[i];
67         }
68         sort(cp + 1,cp + n + 1);
69         int sz = unique(cp + 1,cp + n + 1) - cp - 1;
70         int tmax = -1;
71         for(int i = 1; i <= n; ++i){
72             int p = lower_bound(cp + 1,cp + sz + 1,v[i]) - cp;
73             pii tmp = B.Getmax(p - 1);
74             if(tmp.first == 0) tmp.second = i;
75             tmp.first++;
76             B.Update(p,tmp);
77             dp[i] = tmp;
78             tmax = max(tmax,tmp.first);
79         }
80         ll ans = 0;
81         int pos = 0;
82         for(int i = 1; i <= n; ++i){
83             if(dp[i].first == tmax){
84                 ans += (ll)(dp[i].second - pos) * (ll)(n - i + 1);
85                 pos = dp[i].second;
86             }
87         }
88         printf("%I64d\n",ans);
89     }
90     return 0;
91 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4149047.html

weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值