POJ - 3263 差分+前缀和

只需不断维护相对值的前缀就能得到解

这种思想第一次是在树状数组区间更新那里看到的,由于题目要求是1~n所以直接可以用前缀和维护

注意不能直接-1 +1

还有POJ的数据..要不是书里有提谁知道会这么毒瘤

/*H E A D*/
int delta[maxn];
map<P,int> vis;
int main(){
    int n,I,h,r,a,b;
    while(~iin(n)){
        I=read();h=read();r=read();
        memset(delta,0,sizeof delta);
        vis.clear();
        rep(i,1,r){
            a=read();b=read();
            if(a>b) swap(a,b);//strict prefix
            if(vis[P(a,b)]) continue;
            vis[P(a,b)]=1;
            delta[a+1]--;delta[b]++;//-1 +1
        }
        rep(i,1,n){
            delta[i]+=delta[i-1];
        }
        rep(i,1,n){
            println(delta[i]+h);
        }
    }
    return 0;
}

原文地址:https://www.cnblogs.com/caturra/p/8390433.html

时间: 2024-07-31 15:29:44

POJ - 3263 差分+前缀和的相关文章

HDU 5452——Minimum Cut——————【树链剖分+差分前缀和】

Minimum Cut Time Limit: 3000/2000 MS (Java/Others)    Memory Limit: 65535/102400 K (Java/Others)Total Submission(s): 895    Accepted Submission(s): 387 Problem Description Given a simple unweighted graph G (an undirected graph containing no loops nor

HDU 5419——Victor and Toys——————【线段树|差分前缀和】

Victor and Toys Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 654    Accepted Submission(s): 219 Problem Description Victor has n toys, numbered from 1 to n. The beauty of the i-th toy is wi

poj 3169 差分约束

3169 差分约束的是满足多组形如xi-yj<=bk{i,j<n k<m}不等式极值问题,可以转化为单源最短路来求. 在最短路中 d[v]<=d[u]+w(u,v) 可以看出跟上面的不等式很像 通常有两种一种是求满足所有不等式的最大值,还有是最小值. 这篇博客可以参考一下 分析: 题目给出了两种不等式  d[u]+dl >=d[v]       d[u]+dd<=d[v]  要求的是最大值,也就是最短路 对于d[u]+dl>=d[v] 建边(u,vdl) 对于d[

poj 2046&amp;&amp;poj1961KMP 前缀数组

Power Strings Time Limit: 3000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u Java class name: Main [Submit] [Status] [Discuss] Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc

【POJ 3263】 Tallest Cow

[题目链接] http://poj.org/problem?id=3263 [算法] 若A和B两头牛可以互相看见,那么说明中间的牛的高度都至少比它们少1,因此,我们可以引入一个差分数组c 对于每组关系,我们将c[a+1]减一,c[b]加一 最后,每头牛的最高高度就是 h + c的前缀和 [代码] #include <algorithm> #include <bitset> #include <cctype> #include <cerrno> #includ

POJ 3159[差分约束]

题目链接:[http://poj.org/problem?id=3159] 题意:有N个小朋友,编号为1-N,每个小朋友将分的一些糖果,给出一些关系A.B.C .表示B最多比A多C个,然后问你盆友1和盆友N的糖果数最大差多少.保证有解. 题解:差分约束求最短距离:DIJ+对优化||SPAF+栈优化 #include<queue> #include<cstdio> #include<cstring> #include<algorithm> using name

POJ 3061 (二分+前缀和)

题目链接: http://poj.org/problem?id=3061 题目大意:找到最短的序列长度,使得序列元素和大于S. 解题思路: 两种思路. 一种是二分+前缀和.复杂度O(nlogn).有点慢. 二分枚举序列长度,如果可行,向左找小的,否则向右找大的. 前缀和预处理之后,可以O(1)内求和. #include "cstdio" #include "cstring" int sum[100005],n,s,a,T; bool check(int x) { i

poj 2566Bound Found(前缀和,尺取法)

http://poj.org/problem?id=2566: 题意:找连续的串,求和绝对值与所给数字最接近的串. 思路:先求下标为1的到其他下的串的值,也就是前缀和:这样可以在O(1)的时间内求出各个串的和.比如S1(1,1),S3(1,3); 那么S3-S1就是S(2,3): 然后对上面所求的前缀和按从小到大排序.(因为取的是绝对值所以abs(Sn-Sk)==abs(Sk-Sn)); 这样就可以用尺取法去做了.复杂度为O(n); 还可以用二分取找值,复杂度为O(n*log(n)); 1 #i

POJ 1364[差分约束]

题目链接:[http://poj.org/problem?id=1364] 晕死了.但是也长知识了 题意:一个长度为n的序列:a[1].a[2].a[3]...a[n],然后给你一些约束条件:si.ni.gt||lt.ki表示:a[si].a[si+1]....a[si+ni]<or>ki,问你满足这些约束条件,字符串是否存在.存在输出:lamentable kingdom,否则输出:successful conspiracy 题解:对序列求前缀和,将约束条件改为:sum[si+ni]-sum