看的人家的思路,没有理解清楚,,,

结果一直改一直交,,wa了4次才交上,,,

注意: 为了使用树状数组,我们要按照e从大到小排序。但s要从小到大。(我开始的时候错在这里了)

代码如下:

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>
#include <map> #define M 100005
#define INF 0x7fffffff
#define eps 1e-8
#define LL long long
#define LLU unsigned long long
#define lowbit(x) (x&-x) using namespace std; int c[M], r[M], s[M], e[M], ans[M], n, maxx;
void add(int x)
{
for(int i = x; i <= maxx; i+=lowbit(i))
c[i] += 1;
}
int sum(int x)
{
int ret = 0;
for(int i = x; i > 0; i-=lowbit(i))
ret += c[i];
return ret;
}
int comp(const int a, const int b) { return e[a]==e[b]?s[a]<s[b]:e[a]>e[b]; }
int main ()
{
while(~scanf("%d", &n) && n)
{
memset(c,0,sizeof(c));
maxx = -INF;
for(int i = 1; i <= n; ++i)
{
scanf("%d%d", &s[i], &e[i]);
maxx = max(maxx, e[i]);
r[i] = i;
}
sort(r+1, r+1+n, comp);
for(int i = 1; i <= n; ++i)
{
int d = r[i];
if(i!=1&&s[d]==s[r[i-1]]&&e[d]==e[r[i-1]])
ans[d] = ans[r[i-1]];
else
ans[d] = sum(s[d]+1);
add(s[d]+1);
}
printf("%d", ans[1]);
for(int i = 2; i <= n; ++i)
printf(" %d", ans[i]);
printf("\n");
}
return 0;
}

最新文章

  1. C#解决界面不响应
  2. jQuery 学习笔记(函数调用机制)
  3. js搜索输入关键词
  4. SSH框架应用解析
  5. Android MonoGame坑记
  6. android 浏览器开发实例
  7. 菲涅尔反射(Fresnel Reflection)
  8. 《python核心编程》读书笔记--第16章 网络编程
  9. 如何查看hadoop与hbase的版本匹配关系
  10. Use a layout_width of 0dip instead of wrap_content for better performance.......【Written By KillerLegend】
  11. Swift: 基本操作符
  12. oracle 添加自增索引
  13. 《FPGA零基础入门到精通视频教程》-第002计数器(Modelsim前仿真)
  14. Qt Lite
  15. schedule()函数的调用时机(周期性调度)
  16. freemarker---详细使用教程
  17. Codeforces 149 E. Martian Strings
  18. MySQL相关命令与备份
  19. visual studio发布到远程服务器的IIS
  20. C++ Primer 笔记——标准库类型string

热门文章

  1. [题解]noip2016普及组题解和心得
  2. june 14
  3. ギリギリ eye (优先队列)
  4. Python:进程
  5. 整理分享C#通过user32.dll模拟物理按键操作的代码
  6. css 字间距、CSS字体间距、css 字符间距设置
  7. Xamarin踩坑经历
  8. jQueryAjax笔记
  9. proc文件系统
  10. spring 事务:注解方式