比賽入口
題意:有乙個multiset s,一共有三種操作:
1. s插入乙個x;
2. s刪除乙個x;
3. 查詢s中是否存在兩個數字,使得這兩個數字能和x組成乙個非退化三角形;
思路:顯然,s是有序的,且判斷x是否能和s中兩個數字組成非退化三角形,一共有以下三種情況:
1. x是最大邊,判斷<=x的最後兩個字;
2. x是第二大邊,判斷》=x的第乙個數字和3. x是最小邊,判斷比x大的任意兩個數字的差值的絕對值小於x,由於s可視作有序,那麼最優的方法就是從相鄰的數字中找。
這裡可以用權值線段樹來維護差值(下乙個數字 - 當前數字),由於x∈[1,1e9] ,因此可以採取離線+離散化的做法。每次查詢最小的差值即可。
1 #include2/*3h#include
4#include
5#include
6#include
7#include
8#include
9#include
10#include
11#include
12*/
13#pragma gcc optimize(2)
14using
namespace
std;
15 typedef long
long
ll;16 typedef unsigned long
long
ull;
17 typedef pairpii;
18 typedef pairpll;
19 typedef pairpdd;
20const
int n=2e6+5;21
const
int m=1e4+5;22
const
int inf=2e9+5;23
const ll mod=1e9+7;24
const
double eps=1e-5;25
const
long
double pi=acos(-1.0l
);26
#define ls (i<<1)
27#define rs (i<<1|1)
28#define fi first
29#define se second
30#define pb push_back
31#define mk make_pair
32#define mem(a,b) memset(a,b,sizeof(a))
33ll read()
3439
return x*t;40}
41 multiset s;//
權值線段樹維護下乙個數字和當前數字的差值
42int c[n<<2
],t[n],op[n],a[n],cnt[n],q,len;
43 inline int getid(int
x)44
47void build(int i,int l,int
r)48
55void update(int i,int l,int r,int pos,int
x)56
62int mid=l+r>>1;63
if(pos<=mid) update(ls,l,mid,pos,x);
64else update(rs,mid+1
,r,pos,x);
65 c[i]=min(c[ls],c[rs]);66}
6768
int query(int i,int l,int r,int ll,int
rr)69
76int
main()
77102
else
if(cnt[x]==2) update(1,1,len,x,0);//
同一種數字有兩個
103}
104else
if(op[i]==2
)105
119}
120else
121133
}134
return0;
135}
136/*
1372
1381 1000000000
1393 1000000001
140141
6142
1 2143
1 2144
2 2145
3 3146
1 4147
3 5148
1497
1501 3
1511 2
1521 100
1533 99
1543 1
1551 100
1563 1
157*/
牛客網暑期多校訓練賽第二場 I題 (思維)
題意 在n n的格點上放置汽車,汽車只能放置在一條邊上,汽車要駛到另一條邊。規定兩汽車相撞會損壞或者兩個汽車在同一直線的駛向方向相同是不允許的。並且格點上會有m個障礙物,障礙物是提前放好的。問他最多能擺放多少輛汽車?思路 經過一些嘗試可以發現n為奇數和偶數的汽車放置都是有規律的。如圖 按照這樣的構造...
2020牛客暑期多校訓練營(第二場) A
時間限制 c c 3秒,其他語言6秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 given n strings s 1,s 2,cdots,s ns1 s2 sn now define f s,t as the maximum i t...
2020牛客暑期多校訓練營(第二場
b.boundary 數學 以乙個點為基礎,暴力列舉另外乙個點就可以,就是算圓心的時候有點廢手。ac include inline long long read while c 0 c 9 return x s using namespace std define newnode treenode ...