hdu 5596
来源:互联网 发布:viscosity mac 怎么用 编辑:程序博客网 时间:2024/06/07 19:01
GTW likes math
由于是整数区间,直接枚举即可。时间复杂度O(T∗(r−l))O(T*(r-l))O(T∗(r−l))
注意a可以是0.
GTW likes gt
首先这道题有一个很显然的O(n∗logn)O(n*logn)O(n∗logn)的做法,直接区间加,求区间最大值即可。但是此题还有一个O(n)O(n)O(n)的做法。我们发现b1,b2,...,bxb_1,b_2,...,b_xb1,b2,...,bx都加111就相当于bx+1,bx+2,...,bnb_{x+1},b_{x+2},...,b_nbx+1,bx+2,...,bn都减111。然后我们可以倒着做,记一下最大值,如果遇到了修改操作,就把最大值减111,然后判断一下这个人会不会被消灭掉,然后再更新一下最大值。
代码:#include <iostream>#include<algorithm>#include<stdio.h>#include<cstring>#include<string>#include<stack>#include<vector>#include<queue>using namespace std;#define LL long longconst int maxn=50002;int n,t;struct point{ int id,v;}a[maxn];int add[maxn];int main(){ int m; cin>>t; int c; while(t--){ memset(add,0,sizeof(add)); scanf("%d%d",&n,&m); for(int i=0;i<n;i++) scanf("%d%d",&a[i].id,&a[i].v); for(int i=0;i<m;i++){ scanf("%d",&c); add[c]++; } int cnt=0; for(int i=0;i<n;i++){ // if(add[i+1]){ a[i].v+=m-cnt; cnt+=add[i+1]; //} } // for(int i=0;i<n;i++)cout<<a[i].v<<endl; int max1=-100000000,max0=-100000000; for(int i=n-1;i>=0;i--){ if(a[i].id){ if(a[i].v<max0)n--; max1=max(a[i].v,max1); } else{ if(a[i].v<max1)n--; max0=max(a[i].v,max0); } } printf("%d\n",n); } return 0;}
0 0
- HDU 5596
- hdu 5596
- hdu 5596
- hdu-5596 优先队列
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- 《A Primer of Jungian Psychology》, thoughts!
- [Leetcode]Decode Ways
- Merge Two Sorted Lists
- 自定义字体
- iOS中 static变量与全局、局部变量的区别 !
- hdu 5596
- 深入浅出的讲解傅里叶变换
- CentOS 6.5修改英文为中文的方法
- 初步了解了下node.js 一点感受
- 安卓学习笔记三
- hiho #1257(Snake Carpet-贪吃蛇构造题)
- 查看一个.exe文件是32位还是64位的方法
- 毕设第五周(阅读论文:The optimal sequenced route query)
- 字符集处理: UTF-8