标签:整数 查询 等价 位置 并且 clu i++ mes stream
FJ的N头奶牛按序号1..N排成一排。 每头奶牛都有正整数高度。 你只被告知最高的奶牛的高度H(1≤H≤1,000,000)以及该奶牛的位置P.
FJ已经列出了“牛17看到牛34”形式的R(0≤R≤10,000)行。 这意味着奶牛34至少与奶牛17一样高,并且17至34之间的每头奶牛的高度严格小于奶牛17的高度。
对于来自1..N的每头奶牛,确定其最大可能高度,以便给出的所有信息仍然正确。 保证可以满足所有约束条件。
如果i和j可以互相看到,说明i+1~j-1的奶牛至少都比i和j矮1个单位,所以只需要区间修改i+1~j-1即可,显然差分最简便
没有比最高的奶牛还高的奶牛,所以最高的奶牛的高度一定是0,最后求前缀和查询。
写的比较好看的是判重操作,再加上makepair,很方便。
需要注意的是差分的下标,在l+1位置-1,r位置+1,才等价于修改l+1~r-1
#include<iostream> #include<cstdio> #include<map> #include<cstring> using namespace std; int n,p,h,m; #define N 10100 map<pair<int,int>,bool>flag; int a[N],c[N],s[N]; int main() { scanf("%d%d%d%d",&n,&p,&h,&m); for(int i=1;i<=m;i++) { int x,y; scanf("%d%d",&x,&y); if(x>y)swap(x,y); if(flag[make_pair(x,y)])continue; c[x+1]--;c[y]++; flag[make_pair(x,y)]=1; } for(int i=1;i<=n;i++) { s[i]=s[i-1]+c[i]; printf("%d\n",s[i]+h); } return 0; }
标签:整数 查询 等价 位置 并且 clu i++ mes stream
原文地址:https://www.cnblogs.com/NSD-email0820/p/9550592.html