博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2481 Cows【线段树单点更新】
阅读量:6671 次
发布时间:2019-06-25

本文共 3170 字,大约阅读时间需要 10 分钟。

Cows
Time Limit: 3000MS   Memory Limit: 65536K
Total Submissions: 19652   Accepted: 6690

Description

Farmer John's cows have discovered that the clover growing along the ridge of the hill (which we can think of as a one-dimensional number line) in his field is particularly good. 
Farmer John has N cows (we number the cows from 1 to N). Each of Farmer John's N cows has a range of clover that she particularly likes (these ranges might overlap). The ranges are defined by a closed interval [S,E]. 
But some cows are strong and some are weak. Given two cows: cow
i and cow
j, their favourite clover range is [Si, Ei] and [Sj, Ej]. If Si <= Sj and Ej <= Ei and Ei - Si > Ej - Sj, we say that cow
i is stronger than cow
j
For each cow, how many cows are stronger than her? Farmer John needs your help!

Input

The input contains multiple test cases. 
For each test case, the first line is an integer N (1 <= N <= 10
5), which is the number of cows. Then come N lines, the i-th of which contains two integers: S and E(0 <= S < E <= 10
5) specifying the start end location respectively of a range preferred by some cow. Locations are given as distance from the start of the ridge. 
The end of the input contains a single 0.

Output

For each test case, output one line containing n space-separated integers, the i-th of which specifying the number of cows that are stronger than cow
i

Sample Input

31 20 33 40

Sample Output

1 0 0

Hint

Huge input and output,scanf and printf is recommended.

Source

,Author:Mathematica@ZSU

题意:FJ有n头牛(编号为1~n),每一头牛都有一个测验值(S,E),对于牛i和牛j来说,如果它们的测验值满足下面的条件则表示牛i比牛j强壮:Si <= Sj and Ej <= Ei and Ei - Si > Ej - Sj。现在已知每一头牛的测验值,要求输出每头牛有几头牛比其强壮。

思路:首先将S[i]降序排序,如果相等则按E[i]的升序,根据排序后的顺序往每头牛的S位置加1。如果遇到完全重合的数据,则不需要重新进行求和计算,只需把前面的值赋值给它,否则需要计算获取到牛的S位置的元素的和。

注意区间的开闭端点,由于是可以有右端点重叠,所以 用总区间相减的时候不要把自己的右端点也给减了,要用r-1避免

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f#define ms(a,b) memset(a,b,sizeof(a))#define pi 3.14159265358979#define MOD 1000000007#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1using namespace std;typedef pair
P;typedef long long ll;typedef unsigned long long ull;const int maxn = 100010;struct node { int l, r, id;}a[maxn]; int sum[maxn], ans[maxn];void update(int x, int k){ while (k <= maxn) { sum[k] += x; k += k&-k; }}int query(int k){ int ans = 0; while (k) { ans += sum[k]; k -= k&-k; } return ans;}bool cmp(node a, node b){ if (a.l != b.l) return a.l < b.l; return a.r > b.r;}int main(){ int n; while (~scanf("%d", &n) && n) { for (int i = 1; i <= n; i++) { scanf("%d%d", &a[i].l, &a[i].r); a[i].id = i; } ms(sum, 0); sort(a + 1, a + n + 1, cmp); for (int i = 1; i <= n; i++) { int m = 1, t = i; while (t < n&&a[t + 1].l == a[t].l&&a[t + 1].r == a[t].r) t++, m++; ans[a[t].id] = query(maxn) - query(a[t].r-1); update(m, a[t].r); for (; i < t; i++) { ans[a[i].id] = ans[a[t].id]; } } for (int i = 1; i <= n; i++) { printf("%d ", ans[i]); } puts(""); } return 0;}

转载于:https://www.cnblogs.com/Archger/p/8451606.html

你可能感兴趣的文章
在Maven仓库中添加Oracle JDBC驱动(11g)
查看>>
linux下mysql数据库忘记密码怎么办
查看>>
挺不错的jquery幻灯片
查看>>
浅析《大数据运算》-加减乘除以及模除运算
查看>>
开始nodejs+express的学习+实践(5)
查看>>
在微信小游戏中开发一个贪食蛇
查看>>
通过class获取data-id以及相应的对象
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
SQLServer 2008数据库计算机名更改
查看>>
Tkinter的消息对话框
查看>>
windows 远程桌面kali
查看>>
我的友情链接
查看>>
常见linux系统中RPM包的通用命名规则
查看>>
DELL LATITUDE E6320等笔记本不能识别移动硬盘
查看>>
Debian6.0.7的archive mirror列表真接地气
查看>>
让自己的程序支持CD刻录功能
查看>>
elasticsearch使用java api批量插入数据
查看>>
Linux系统新手学习的11点建议
查看>>
python开发支持万台设备的分布式监控软件视频教程
查看>>