标签:联通 pre zoj names 二维树状数组 clu 题目 之间 ems
T1 poj2029
90分:二维前缀和
100分:二维树状数组维护二维前缀和(这叫什么满分算法啊喂)
反正瞎搞搞30minAC
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; int T[10010][10010]; inline int lowbit(int x){return x&(-x);} int w,h,s,t,x,y; inline int read() { int x=0,f=1; char ch=getchar(); while(!isdigit(ch)){if(ch==‘-‘)f=-f;ch=getchar();} while(isdigit(ch)){x=10*x+ch-‘0‘;ch=getchar();} return x*f; } inline int sum(int x,int y) { int res=0; for(int i=x;i>=1;i-=lowbit(i)) for(int j=y;j>=1;j-=lowbit(j))res+=T[i][j]; return res; } inline void update(int x,int y) { for(int i=x;i<=h;i+=lowbit(i)) for(int j=y;j<=w;j+=lowbit(j))T[i][j]++; } int main() { freopen("trees.in","r",stdin); freopen("trees.out","w",stdout); int n; while(~scanf("%d",&n) && n) { memset(T,0,sizeof(T)); w=read();h=read(); for(int i=1;i<=n;i++) { x=read(),y=read(); update(y,x); } int ans=-1; s=read(),t=read(); for(int i=t;i<=h;i++) for(int j=s;j<=w;j++) ans=max(ans,sum(i,j)+sum(i-t,j-s)-sum(i-t,j)-sum(i,j-s)); cout<<ans<<endl; } }
T2poj3250
高一轩同学出这道题的时候竟然把我当成了素材
真鸡儿刺激
把问题转化一下 题目问:“每个人能看到的人的总数”我们把它转换成“每个人能被看到的次数的总数”
于是打个单调递减栈 每插进来一个看栈里有多少元素就行了
强烈鄙视yyc的做法
因为我竟然不会
淦
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> using namespace std; int st[80010],top,n,h,ans; int main() { freopen("height.in","r",stdin); freopen("height.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&h); while(top>0 && st[top-1]<=h)--top; ans+=top; st[top++]=h; } cout<<ans; }
T3bzoj1924
这题一看
有向图最长链
又一看
mmp邻接矩阵邻接表全**开不下
于是想到Tarjan缩点
于是差不多就解决了
横门和横门之间连无向边 和其他连有向边
竖门同理
周围8格用map存一下联通连边
Tarjan
Dp
完事
70
为什么只有70 因为满分只有70呀
淦 没开O2 我的mapT掉了
D1270
标签:联通 pre zoj names 二维树状数组 clu 题目 之间 ems
原文地址:http://www.cnblogs.com/Kong-Ruo/p/7619996.html