算法题
扣扣坎坎坷坷扩扩扩
这个作者很懒,什么都没留下…
展开
-
hdu1394
如何转化很重要,先求原序列的逆序数,则每次移动后逆序数增加为 n-1-2*x[i],用线段树求原序列逆序数,看做x[i]=i,求x[i]和其之前数构成的逆序数,只要看大于x[i]的数是否出现,线段树中就是查询x[i]-n 的和# include# include# define maxn 5005using namespace std;int sum[maxn<<2];int min(i原创 2013-11-13 18:10:16 · 431 阅读 · 0 评论 -
UVA 10047
# include# include# define maxn 26struct{ int dir[4];}vis[maxn][maxn][5];//还要记录颜色struct Point{ int x,y; int dir; int time; int c;}que[maxn*maxn*4*5];int gox[4]={-1,1,0,0};原创 2013-10-10 21:14:34 · 411 阅读 · 0 评论 -
XDU 1278
求出割点后枚举 ,两两相乘# include# include# define maxn 1005using namespace std;vector G[maxn];int total;int pre[maxn],iscut[maxn],dfs_clock,vis[maxn],N,num[maxn];int dfs(int u,int f){ int原创 2013-09-10 21:13:39 · 683 阅读 · 1 评论 -
hdu1004
# include# include# include# includeusing namespace std;int main(){ mapm; int N,max=0; while(scanf("%d",&N)!=EOF&&N) { m.clear(); char ss[17]; string str;原创 2014-03-30 22:59:05 · 471 阅读 · 0 评论 -
1166
# include# include# define maxn 50005*4using namespace std;int sum[maxn];//不用记录每个节点的左右void build(int o,int l,int r){ if(l==r) scanf("%d",&sum[o]); else { int m=(l+r)/2; build(o原创 2013-11-12 22:01:46 · 524 阅读 · 0 评论 -
mid=(l+r)/2 mid=l+(r-l+1)/2 区别
用二分法解题时,mid上下取值正确与否关系程序是否进入si原创 2014-04-05 21:21:41 · 4170 阅读 · 2 评论 -
Uva11324
# include# include# include# includeusing namespace std;const int maxn=2000+5;vectorG[maxn];vectorScc[maxn];int pre[maxn],low[maxn],vis[maxn],value[maxn],sccno[maxn],dfs_clock,scc_cnt;stackS;原创 2014-04-05 15:44:16 · 507 阅读 · 0 评论 -
xdu1267 二分查找
# include# includeusing namespace std;typedef long long LL;const LL maxk=1e10;LL a[10000],b[10000];int A,B;int cmp(int x,int y){ return x>y;}LL find(int aa,LL m){ int l=-1,r=B;原创 2014-05-08 15:43:29 · 432 阅读 · 0 评论