結果
| 問題 |
No.674 n連勤
|
| コンテスト | |
| ユーザー |
nmnmnmnmnmnmnm
|
| 提出日時 | 2017-03-27 21:42:33 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 123 ms / 2,000 ms |
| コード長 | 2,162 bytes |
| コンパイル時間 | 1,682 ms |
| コンパイル使用メモリ | 103,956 KB |
| 実行使用メモリ | 12,968 KB |
| 最終ジャッジ日時 | 2024-09-14 12:13:31 |
| 合計ジャッジ時間 | 4,266 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
#include <algorithm>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
#define sz size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rep(i,a,b) for(ll i=(a);i<(b);++i)
#define clr(a, b) memset((a), (b) ,sizeof(a))
#define ctos(c) string(1,c)
#define print(x) cout<<#x<<" = "<<x<<endl;
#define MOD 1000000007
#define A 250
ll dh[60300];
ll dl[60300];
ll dd[60300];
ll dddh[300];
ll dddl[300];
ll geth(ll p){
ll index = p/A;
if(dddh[index]==-1){
return dh[p];
}
else{
return dddh[index];
}
}
ll getl(ll p){
ll index = p/A;
if(dddl[index]==-1){
return dl[p];
}
else{
return dddl[index];
}
}
int main(){
ll n,q;
cin>>n>>q;
clr(dh,-1);
clr(dl,-1);
clr(dd,-1);
clr(dddh,-1);
clr(dddl,-1);
set<ll> se;
vector<pair<ll,ll> > vp;
rep(i,0,q){
ll a,b;
cin>>a>>b;
a++;b++;
vp.pb(mp(a,b));
se.insert(a);
se.insert(b);
}
vector<ll> vse(all(se));
map<ll,ll> ma;
rep(i,0,vse.sz){
dd[i+1]=vse[i];
ma[vse[i]] = i+1;
}
vector<pair<ll,ll> > vp1;
rep(i,0,vp.sz){
vp1.pb(mp(ma[vp[i].fi],ma[vp[i].se]));
}
ll mx = 0;
rep(i,0,vp1.sz){
ll a1,b1;
ll a = vp1[i].fi;
ll b = vp1[i].se;
ll pa = getl(a-1);
if(pa==-1)a1 = a;
else {
if(dd[a]-1<=dd[geth(a-1)]){
a1 = pa;
}
else{
a1 = a;
}
}
ll pb = geth(b+1);
if(pb==-1)b1 = b;
else {
if(dd[getl(b+1)]<=dd[b]+1){
b1 = pb;
}
else{
b1 = b;
}
}
ll index1 = a1/A;
ll index2 = b1/A;
rep(j,index1*A,(index1+1)*A){
if(a1 <= j && j <= b1){
dl[j] = a1;
dh[j] = b1;
}
}
rep(j,index2*A,(index2+1)*A){
if(a1 <= j && j <= b1){
dl[j] = a1;
dh[j] = b1;
}
}
rep(j,index1+1,index2){
dddl[j] = a1;
dddh[j] = b1;
}
mx = max(mx,dd[b1]-dd[a1]+1);
printf("%lld\n", mx);
}
return 0;
}
nmnmnmnmnmnmnm