您的位置:首页 > 其它

Codeforces 306B

2015-12-18 20:20 288 查看
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <set>
#include <map>
using namespace std;

const int maxm=int(2e5)+100;

struct data
{
int x, y, num;
bool operator < (const data b) const
{
if (x!=b.x) return x<b.x;
return y>b.y;
}
};

int n, m;
int ans;
data a[maxm];
bool vis[maxm];

void init()
{
scanf("%d%d", &n, &m);
for (int i=1; i<=m; ++i)
{
scanf("%d%d", &a[i].x, &a[i].y);
a[i].y+=a[i].x-1;
a[i].num=i;
}
sort(a+1, a+1+m);
}
void solve()
{
ans=m;
for (int i=1, next; i<=m; i=next)
{
vis[a[i].num]=true;
ans--;
next=i;
int k=i+1;
while (k<=m && a[k].x<=a[i].y+1)
{
if (a[k].y>a[next].y) next=k;
++k;
}
if (next==i) next=k;
}
printf("%d\n", ans);
for (int i=1; i<=m; ++i)
if (!vis[i]) printf("%d ", i);
}
int main()
{
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
init();
solve();
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: