題目鏈結
題意給乙個序列每次詢問給l,r,x,k1,k2,每次查詢區間中小於等於x的所有數字裡面第k1小的值以及大於x的所有數字裡面第k2小的值,如果不存在,輸出-1
每次輸出兩個數,對於每個數如果不存在,則單獨輸出-1
主席樹模板題,找出≤x的個數p,然後查詢區間第k1 , k2+p小的數字。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define long long long
const
int inf=0x3f3f3f3f;
const long mod=1e9+ 7;
const
double pi=acos(-1.0);
#define clri(x) memset(x,-1,sizeof(x))
#define clr0(x) memset(x,0,sizeof x)
#define clr1(x) memset(x,inf,sizeof x)
#define clr2(x) memset(x,-inf,sizeof x)
#define eps 1e-10
#define lson l , mid , rt<< 1
#define rson mid + 1 ,r , (rt<<1)+1
#define root 1, n , 1
const
int maxn = 4e5 ;
struct treetree[maxn *30+ 30];
int n , n ;
int a[400100] ;
int root[400100] ;
int tot = 0;
int num[400100] ;
void push_up(int rt )
int build(int l, int r)
int mid = (l + r) / 2;
tree[rt].l = build(l , mid ) ;
tree[rt].r = build(mid + 1, r) ;
push_up(rt) ;
return rt ;
}int hash()
int update(int l ,int r , int rt , int x)
int mid = ( l + r ) / 2;
if( x <= a[mid])
tree[now].l = update(l , mid , tree[now].l ,x) ;
else
tree[now].r = update(mid + 1, r , tree[now].r , x) ;
push_up( now ) ;
return now ;
}int que1( int l , int r , int r_rt ,int l_rt , int k )
int que2(int l ,int r ,int r_rt , int l_rt , int x)
int mid = (l + r) / 2;
if(a[mid] >= x)
return que2(l , mid , tree[r_rt].l , tree[l_rt].l , x) ;
else
return tree[tree[r_rt].l].val - tree[tree[l_rt].l].val + que2(mid + 1 , r , tree[r_rt].r , tree[l_rt].r , x ) ;
}int main()
return
0 ;}
玲瓏杯1141 fft計數
1141 喵哈哈村的智慧型大師丶 嫵鈳取玳 月 time limit 1s memory limit 256mbyte submissions 173solved 41 description 丶 嫵鈳取玳 月是月大叔的id,他是乙個智商高達429的智力大師,最擅長的技能就是搞事。今天他又要開始搞事...
「玲瓏杯」ACM比賽 Round 23
a 生是脂肪的人 time limit 2s memory limit 128mbyte submissions 263solved 97 description 給定乙個整數n,輸出 10 n 7 的個位數。其中 abs n 1e18 input 第一行是乙個正整數t 1 t 100 表示資料組數...
玲瓏杯」ACM比賽 Round 11 待補
題目 官方題解 直接貼上了,沒過的題以後再補 儘管不太可能qaq 第一題 直接列舉所有可能的x並且計算答案,得出最優解 水題,忽略 第二題 可以連線的兩個工廠相當於可以匹配的兩個點,那麼問題轉化為求兩個串的最長公共子串行,但o n 2 的複雜度會超時,由於第二個串每個點最多只有6個點與之匹配,所以可...