hdu 5596GTW likes gt(最好倒着思考)
来源:互联网 发布:s7 200 编程电缆 原装 编辑:程序博客网 时间:2024/06/05 09:46
题目链接:【hdu 5596】
1、求后缀数组,算出第i个一共加了多少次,倒着做
<span style="font-size:14px;">#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>using namespace std;struct node{int id, di;}a[50010];int time[50010];int main(){int T;cin>>T;while(T--){memset(time, 0, sizeof(time));int n, m;cin>>n>>m;for(int i=1; i<=n; i++){cin>>a[i].id>>a[i].di;}for(int i=1; i<=m; i++){int id;cin>>id;time[id]++;}for(int i=n-1; i>=1; i--) time[i]+=time[i+1];int max1=-1, max0=-1, ans=n;for(int i=n; i>=1; i--){if(a[i].id==0){if(a[i].di+time[i]<max1) ans--;max0=max(max0, a[i].di+time[i]);}else{if(a[i].di+time[i]<max0) ans--;max1=max(max1, a[i].di+time[i]);}}cout<<ans<<endl;}return 0;}</span>
2、第1到第i个加了多少就相当于第i+1到第n个减了多少
(到着的)
<span style="font-size:14px;">#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>using namespace std;struct node{int id, di;}a[50010];int time[50010];int main(){int T;cin>>T;while(T--){memset(time, 0, sizeof(time));int n, m;cin>>n>>m;for(int i=1; i<=n; i++){cin>>a[i].id>>a[i].di;}for(int i=1; i<=m; i++){int id;cin>>id;time[id]++;}int max1=-1, max0=-1, ans=n;for(int i=n; i>=1; i--){max1-=time[i];max0-=time[i];if(a[i].id==0){if(a[i].di<max1) ans--;max0=max(max0, a[i].di);}else{if(a[i].di<max0) ans--;max1=max(max1, a[i].di);}}cout<<ans<<endl;}return 0;}</span>
(正着来的)===> 这个效率貌似是最高的
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <string>#include <vector>using namespace std;int a[50010], b[50010];struct node{int id, x;}p[50010];int time[50010];int main(){int T;scanf("%d", &T);while(T--){int n, m;memset(time, 0, sizeof(time));scanf("%d%d", &n, &m);for(int i=1; i<=n; i++){scanf("%d%d", &p[i].id, &p[i].x);}for(int i=0; i<m; i++){int id;scanf("%d", &id);time[id]++;}int sa=0, sb=0, la=0, lb=0;int ans=0;for(int i=1; i<=n ;i++){p[i].x-=ans;if(p[i].id==0){for(int j=sa; j<la; j++){if(a[j]<p[i].x) sa++;else break;}b[lb++]=p[i].x;sort(b+sb, b+lb);} else{for(int j=sb; j<lb; j++){if(b[j]<p[i].x) sb++;else break;}a[la++]=p[i].x;sort(a+sa, a+la);}ans+=time[i];}printf("%d\n", la-sa+lb-sb);}return 0;}
0 0
- hdu 5596GTW likes gt(最好倒着思考)
- HDU 5596 GTW likes gt(multiset)
- hdu 5596 GTW likes gt
- HDU 5596:GTW likes gt
- HDU 5596 GTW likes gt
- hdu 5596 GTW likes gt
- HDU - 5596 - GTW likes gt
- hdu 5596 GTW likes gt
- HDU 5596 GTW likes gt(逆向思维)
- hdu 5596 GTW likes gt(逆向思维)
- HDU 5596 GTW likes gt 暴力~
- HDU 5596 GTW likes gt 倒推
- HDU 5596 GTW likes gt 优先队列 BestCoder#66
- HDU 5596/BC 66B GTW likes gt
- 杭电 HDU 5596 (详解)GTW likes gt(思维)
- HDOJ 5596 GTW likes gt(巧解)
- HDOJ 5596 GTW likes gt 【思维 】
- hdoj 5596 GTW likes gt 【思维】
- 变(2)
- [ACM]判断正多边形
- Xcode 及 iOS 常用宏和常量
- 微服务架构在云端的应用
- Week5-7Dependency parsing
- hdu 5596GTW likes gt(最好倒着思考)
- Service Intent must be explitict
- android开发之SnackBar的使用
- 领域驱动设计整理——概念&架构
- C#之显示
- #递归 解决ABCDE 5人分鱼问题鱼,
- JAVA 解析excel兼容2003和2007以后的版本
- TortoiseGit安装与配置02
- JAVA wait(), notify(),sleep详解