Codeforces Round #261 (Div. 2)
第一场难得DIV2简单+AK人数多;
E:给出一张图,求最多的边数,满足:在这个边的集合中后面的边的权值大于前面的边;
思路:我们将图按权值排列,以为只可能边权值小的跟新权值大的所以对于一条边我们只跟新一次,所以是O(N);
我们这里用两个数组进行跟新维护:
#include<iostream>
#include<string>
#include<string.h>
#include<vector>
#include<algorithm>
#include<cstdio>
#define N 444444
struct node
{
int u,v,w;
};
node e[N]; int pre[N],dp[N];
using namespace std;
int cmp(node a,node b){
return a.w<b.w;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for (int i=;i<=m;i++)
scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);
sort(e+,e+m+,cmp); for (int i=;i<=m;i++)
{
int j=i+;
while (e[j].w==e[i].w&&j<=m) j++;
for (int k=i;k<j;k++) dp[e[k].v]=max(dp[e[k].v],pre[e[k].u]+);
for (int k=i;k<j;k++) pre[e[k].v]=max(pre[e[k].v],dp[e[k].v]);
i=j-;
}
int ans=;
for (int i=;i<=n;i++) ans=max(ans,pre[i]);
printf("%d\n",ans);
return ;
}
D:题目有点绕;
做法:我们先对HASH,求出两个数组L,R分别表示从左到右,从右到左:F(1,I,AI),F(J,N,AJ);
然后对于F[1,I,AI]求出I<J<=N中F[J,N,AJ]<F[1,I,AI]的个数;对于这种求区间的问题,树状数组就好。
我这里用map hash
然后我是从右往左的顺序统计的,做的时候脑残
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<iostream>
#include<vector>
#include<math.h>
#include<map>
#define inf 0x3f3f3f
using namespace std;
map<int,int>mp;
map<int,int>mp2;
typedef long long ll;
int n;
#define N 1023456
int a[N];
int b[N];
int c[N];
int r[N];
int l[N];
int f[N];
int lowbit(int x)
{
return x&(-x);
} void update(int x)
{
while (x<=n)
{
f[x]+=;
x+=lowbit(x);
}
} ll sum(int x)
{
ll s=;
while (x)
{
s+=f[x];
x-=lowbit(x);
}
return s;
} int main()
{
scanf("%d",&n);
mp.clear();
mp2.clear();
int t=;
for (int i=;i<=n;i++) {
scanf("%d",&a[i]);
if (!mp[a[i]]) mp[a[i]]=++t;
} for (int i=n;i>=;i--)
r[i]=b[mp[a[i]]]++; ll ans=;
for (int i=;i<=n;i++)
l[i]=c[mp[a[i]]]++; for (int i=;i<=n;i++)
{l[i]++;r[i]++;} //for (int i=1;i<=n;i++) cout<<l[i]<<" "<<r[i]<<endl;
for (int i=n-;i>=;i--)
{
update(r[i+]);
ans+=sum(l[i]-);
//printf("%d\n",ans);
} cout<<ans;
return ;
}
C:还没看懂,好难^^
B:q求最大的差值,注意全相等的情况=N*(N-1)/2;
#include<string>
#include<iostream>
#include<vector>
#include<math.h>
#define inf 0x3f3f3f
using namespace std;
int n; int a[];
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i]);;
sort(a+,a+n+);
int mm=a[n];
int m=a[];
long long t1=;
long long t2=;
for (int i=;i<=n;i++)
{
if (a[i]==mm)t1++;
if (a[i]==m) t2++;
}
if (mm!=m) cout<<mm-m<<" "<<t1*t2<<endl;
else
{
long long t1=n; cout<<mm-m<<" "<<t1*(t1-)/<<endl;
}
return ;
}
A:正方形。。
乱搞,HACK点居多,当点在一条线上,分别考虑
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<string>
#include<iostream>
#include<vector>
#include<math.h>
#define inf 0x3f3f3f
using namespace std;
int n;
int main()
{
int x1,x2,yy1,y2;
cin>>x1>>yy1>>x2>>y2; if (x1==x2&&yy1==y2) {cout<<-<<endl;return ;}
if (x1!=x2&&yy1!=y2){
if (abs(y2-yy1)!=abs(x1-x2))
{
cout<<-;
return ;
}
cout<<x1<<" "<<y2<<" "<<x2<<" "<<yy1<<endl;
return ;
} if (yy1>y2) swap(yy1,y2);
if (x1==x2)
{
int b=y2-yy1;
cout<<x1+b<<" "<<yy1<<" "<<x2+b<<" "<<yy1+b<<endl;
return ;
}
else
{
if (x1>x2) swap(x1,x2);
int b=x2-x1;
cout<<x1<<" "<<yy1+b<<" "<<x2<<" "<<yy1+b<<endl;
return ;
}
return ;
}
终于出了灰的坑
Codeforces Round #261 (Div. 2)的更多相关文章
- Codeforces Round #261 (Div. 2)[ABCDE]
Codeforces Round #261 (Div. 2)[ABCDE] ACM 题目地址:Codeforces Round #261 (Div. 2) A - Pashmak and Garden ...
- Codeforces Round #261 (Div. 2) B
链接:http://codeforces.com/contest/459/problem/B B. Pashmak and Flowers time limit per test 1 second m ...
- Codeforces Round #261 (Div. 2) E. Pashmak and Graph DP
http://codeforces.com/contest/459/problem/E 不明确的是我的代码为啥AC不了,我的是记录we[i]以i为结尾的点的最大权值得边,然后wa在第35 36组数据 ...
- Codeforces Round #261 (Div. 2)459D. Pashmak and Parmida's problem(求逆序数对)
题目链接:http://codeforces.com/contest/459/problem/D D. Pashmak and Parmida's problem time limit per tes ...
- Codeforces Round #261 (Div. 2) - E (459E)
题目连接:http://codeforces.com/contest/459/problem/E 题目大意:给定一张有向图,无自环无重边,每条边有一个边权,求最长严格上升路径长度.(1≤n,m≤3 * ...
- Codeforces Round #261 (Div. 2) B. Pashmak and Flowers 水题
题目链接:http://codeforces.com/problemset/problem/459/B 题意: 给出n支花,每支花都有一个漂亮值.挑选最大和最小漂亮值得两支花,问他们的差值为多少,并且 ...
- Codeforces Round #261 (Div. 2)459A. Pashmak and Garden(数学题)
题目链接:http://codeforces.com/problemset/problem/459/A A. Pashmak and Garden time limit per test 1 seco ...
- Codeforces Round 261 Div.2 E Pashmak and Graph --DAG上的DP
题意:n个点,m条边,每条边有一个权值,找一条边数最多的边权严格递增的路径,输出路径长度. 解法:先将边权从小到大排序,然后从大到小遍历,dp[u]表示从u出发能够构成的严格递增路径的最大长度. dp ...
- Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --树状数组
题意:给出数组A,定义f(l,r,x)为A[]的下标l到r之间,等于x的元素数.i和j符合f(1,i,a[i])>f(j,n,a[j]),求有多少对这样的(i,j). 解法:分别从左到右,由右到 ...
随机推荐
- Laravel 5 基础(十一)- 子视图和表单复用
我们需要处理编辑文章的问题.当然我们可以手工添加新的路由,就像这样: Route::get('/articles/{id}/edit', 'ArticleController@edit'); 让我们在 ...
- 09-排序3 Insertion or Heap Sort
和前一题差不多,把归并排序换成了堆排序.要点还是每一次排序进行判断 开始犯了个错误 堆排序该用origin2 结果一直在排序origin ,误导了半天以为是逻辑错误...一直在检查逻辑 建立最大堆 排 ...
- C#程序双击运行之后,界面不显示,但是在任务管理器有进程(一个winform找bug之旅)
最近客户端又出了奇葩事情:http://q.cnblogs.com/q/43038/ 如这篇博问一样.我的一个客户的电脑上程序打开了,进程也有了,就是界面窗体出不来!!! 我是win7是开发机,三四台 ...
- 将python2.7+django1.10部署到SAE上
首先我想说的是我为什么选择SAE呢?本人学生一枚,没钱.然后sae好像又有免费的一定限额,所以我就选了它. 期间曲折颇多,实在不是三言两语所能道情的.各种百度,谷歌,最后所幸成功了,幸哉! 主要参考了 ...
- DB2递归查询
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n&g ...
- ajax & jsonp & img
ajax 是一种请求服务器的方式,核心是XMLHttpRequest对象: 优点是无需刷新页面, 缺点是不能跨域请求. /* * Ajax direacted by Zakas * * Ajax.ge ...
- net-snmp的安装
安装环境是ubuntu 14. 方法1:apt-get install net-snmp (非root用户需要sudo 提升权限) 方法2:自定义安装选择不同的版本去编译. 1:先去下载所需要的ta ...
- centos6.3编译安装Apache2.4.3+PHP5.4.8+Mysql5.5.8
以虚拟机VirtualBox 版本是4.1.20(内存设置为512M,centos安装是文本模式下安装),全新以最小化包安装了32位的 CentOS6.3系统,作为本地web环境,上次讲了在windo ...
- OC学习笔记之属性详解和易错点
属性的概念在OC1.0中就存在,格式是定义实例变量,然后定义setter和getter方法,用点操作符操作属性 举例,类的接口部分 @interface Father : NSObject { NSI ...
- [shell基础]——I/O重定向
文件标识符(FD) 1. Linux使用文件标识符(FD)来标识一个进程正在访问的特定文件 2. 当打开一个文件或创建一个文件时,Linux将返回一个文件标识符供其他操作引用 3. 文件标识符是一个小 ...